web-dev-qa-db-fra.com

Get-WmiObject: le serveur RPC n'est pas disponible. (Exception de HRESULT: 0x800706BA)

Quand je cours

Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber

cela fonctionne pour les hôtes locaux et distants.

Quand je fais cela pour une liste d’hôtes utilisant

ForEach ($_ in gc u:\pub\list.txt) {
    Get-WmiObject win32_SystemEnclosure -Computer $_ | select serialnumber | format-table -auto @{Label="Hostname"; Expression={$_}}, @{Label="Service Tag"; Expression={$_.serialnumber}}
}

il revient

Get-WmiObject: le serveur RPC n'est pas disponible. (Exception de HRESULT: 0x800706BA)

36
user1501778

Vérifiez que la règle "Windows Management Instrumentation (WMI-In)" est activée dans le pare-feu pour chaque ordinateur distant.

Ou dans une exécution de commande administrative/invite Powershell:

netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes
30
David Brabant

Votre code n'utilise probablement pas un nom d'ordinateur correct, vous devriez le vérifier.

Votre erreur est:

Get-WmiObject: le serveur RPC n'est pas disponible. (Exception de HRESULT: 0x800706BA)

C'est le résultat que vous obtenez lorsqu'une machine n'est pas accessible. Les suggestions de pare-feu sont donc raisonnables, mais dans ce cas, probablement pas correct car vous dites que cela fonctionne:

Get-WmiObject win32_SystemEnclosure -Computer hostname

Donc, dans votre cas, il semble que lorsque cette ligne est exécutée:

Get-WmiObject win32_SystemEnclosure -Computer $_

$ _ ne contient pas un nom d'ordinateur approprié. Vous pouvez vérifier le type et le contenu de $ _. Il y a probablement un problème avec le contenu du fichier. Si le fichier est correct, les lignes ne sont peut-être pas correctement terminées. Peut-être regarder de plus près avec Write-Host:

ForEach ($_ in gc u:\pub\list.txt) {
    Write-Host "Get-WmiObject win32_SystemEnclosure -Computer '$_'"
    Get-WmiObject win32_SystemEnclosure -Computer $_ | select serialnumber | format-table -auto @{Label="Hostname"; Expression={$_}}, @{Label="Service Tag"; Expression={$_.serialnumber}}
}
12
jimhark

Cela peut être dû à divers problèmes. Je ne peux pas dire lequel est là dans votre cas.

Les raisons indiquées ci-dessous peuvent être là:

  • DCOM n'est pas activé sur l'ordinateur hôte ou l'ordinateur cible, ni sur les deux.
  • Votre pare-feu ou même votre antivirus empêche l’accès.
  • Tout service lié à WMI est désactivé.

Certains services liés à WMI sont comme donnés:

  • Gestionnaire de connexion automatique d'accès distant
  • Gestionnaire de connexion d'accès distant
  • Appel de procédure distante (RPC)
  • Localisateur d'appel de procédure distante (RPC)
  • Registre à distance 

Pour le réglage DCOM, voir:

  • Clé: HKLM\Software\Microsoft\OLE, valeur: EnableDCOM

La valeur doit être définie sur 'Y'.

11
Abhishek_Mishra

J'avais le même problème mais seulement avec quelques machines. J'ai trouvé que l'utilisation de Invoke-Command pour exécuter la même commande sur le serveur distant fonctionnait.

Donc au lieu de: 

Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate

Utilisez ceci:

Invoke-Command -ComputerName $hostname -Authentication Negotiate -ScriptBlock {Get-WmiObject win32_SystemEnclosure}
2
sxm1972

Si vous avez essayé certaines des suggestions figurant dans les autres réponses, notamment:

  • Réponse de David Brabant: confirmation de l'activation de la règle de pare-feu entrant Windows Management Instrumentation (WMI) 
  • Réponse d'Abhi_Mishra: confirmer que DCOM est activé dans le registre

Ensuite, considérez autres raisons courantes pour obtenir cette erreur:

  • La machine distante est éteinte
  • Vous avez spécifié un nom d'ordinateur non valide
  • Il y a des problèmes de connectivité réseau entre vous et l'ordinateur cible
1

Résolu. 

J'exécutais exactement le même message d'erreur lorsque j'essayais d'exécuter le script suivant (partiel) sur une VM] distante configurée pour figurer dans WORKGROUP.

Restart-Computer -ComputerName MyComputer -Authentication Default -Credential $cred -force

J'ai remarqué que je pouvais exécuter le script à partir d'un autre VM dans le même WORKGROUP lorsque je désactivais le pare-feu mais que je ne pouvais toujours pas le faire à partir d'une machine du domaine. Ces deux choses avec les suggestions de Stackflow sont ce qui m'a amené à la solution suivante:

Remarque: modifiez ces paramètres à vos risques et périls. Vous devez comprendre les implications de ces modifications sur la sécurité avant de les appliquer.

Sur la machine distante:

  • Assurez-vous de réactiver votre pare-feu si vous l'avez désactivé lors des tests.
  • Exécutez Enable-PSRemoting à partir de PowerShell avec succès
  • Allez dans wf.msc (Pare-feu Windows avec sécurité avancée)
  • Confirmez que la règle entrante privée/publique 'DCOM-In)' est activée ET et assurez-vous que la propriété 'Adresse distante' est 'Toute' ou quelque chose de plus sécurisé. .
  • Confirmez que la règle entrante privée/publique 'WMI-In)' est activée ET et assurez-vous que la propriété 'Adresse distante' est 'Toute' ou quelque chose de plus sûr. .

Facultatif: Si vous souhaitez exécuter des commandes telles que 'Enter-PSSession', vous devrez peut-être également procéder comme suit.

  • Confirmez la règle 'Gestion de Windows Instrumentation (ASync-In)}' entrante privée/publique est activée ET assurez-vous que la propriété 'Adresse distante' est ' Tout ou quelque chose de plus sécurisé.
  • Ouvrir un port entrant TCP sur 5985

IMPORTANT! _ Il faut environ 2 minutes environ après le redémarrage de ma télécommande VM pour répondre à la commande 'Enter-PSSession' alors que d'autres services réseau démarrent sans problème. Donnez-lui quelques minutes et essayez ensuite.

Note latérale: Avant de modifier la propriété "Adresse distante" en "N'importe lequel", les deux règles étaient définies sur "Sous-réseau local".

1
GrayDwarf

J'ai trouvé cet article de blog qui suggérait l'ajout d'une exception de pare-feu pour "Administration à distance", ce qui a fonctionné pour nous sur nos systèmes Windows Server 2008 Enterprise.

http://mikefrobbins.com/2012/03/08/get-wmiobject-the-rpc-server-is-unavailable-exception-from-hresult-0x800706ba/

1
Alan

L'activation des règles FW suivantes sur le système cible a résolu le problème sous Win2k16:

  • Instrumentation de gestion Windows (WMI-In)
  • Coordinateur de transaction distribuée (RPC)
  • Coordinateur de transaction distribuée (RPC-EPMAP)
1
Trebor

J'avais le même problème en utilisant foreach. J'ai sauvegardé la liste sur $ serveurs et utilisé ce qui a fonctionné:

ForEach ($_ in $Servers) { Write-Host "Host $($_)" | Get-WmiObject win32_SystemEnclosure -Computer $_ | format-table -auto @{Label="Service Tag"; Expression={$_.serialnumber}}
}
1
Eric

Désactiver le pare-feu a résolu le problème pour moi.

0
Ayan Mullick

Je pensais ajouter que nous avions également rencontré ce problème avec plusieurs machines de notre domaine. J'ai créé une liste de machines incriminées et les ai toutes ajoutées à un fichier texte à partir duquel exécuter le script. J'ai exécuté cela à partir de l'invite CMD en utilisant des privilèges élevés.

 psexec @firewallFix.txt -d netsh advfirewall firewall 
        set rule name="Windows Management Instrumentation (WMI-In)" 
        profile=domain new enable=yes profile=domain
0
hungry4pwr