it-swarm.com.de

Get-WmiObject: Der RPC-Server ist nicht verfügbar. (Ausnahme von HRESULT: 0x800706BA)

Wenn ich renne

Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber

es funktioniert sowohl für lokale als auch für entfernte Hosts.

Wenn ich dies für eine Liste von Hosts mache

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}}
}

es kehrt zurück

Get-WmiObject: Der RPC-Server ist nicht verfügbar. (Ausnahme von HRESULT: 0x800706BA)

36
user1501778

Stellen Sie sicher, dass die Regel "Windows-Verwaltungsinstrumentation (WMI-In)" in der Firewall für jeden Remotecomputer aktiviert ist.

Oder in einem Verwaltungsbefehl/PowerShell-Eingabeaufforderungslauf:

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

Ihr Code verwendet wahrscheinlich keinen korrekten Maschinennamen. Sie sollten dies noch einmal überprüfen.

Ihr Fehler ist:

Get-WmiObject: Der RPC-Server ist nicht verfügbar. (Ausnahme von HRESULT: 0x800706BA)

Dies ist das Ergebnis, das Sie erhalten, wenn eine Maschine nicht erreichbar ist. Also die Firewall-Vorschläge sind vernünftig, aber in diesem Fall wahrscheinlich nicht korrekt, weil Sie sagen, dass dies funktioniert

Get-WmiObject win32_SystemEnclosure -Computer hostname

In Ihrem Fall scheint es also, wenn diese Zeile ausgeführt wird:

Get-WmiObject win32_SystemEnclosure -Computer $_

$ _ enthält keinen richtigen Computernamen. Sie können den Typ und den Inhalt von $ _ überprüfen. Möglicherweise liegt ein Problem mit dem Dateiinhalt vor. Wenn die Datei richtig aussieht, werden die Zeilen möglicherweise nicht ordnungsgemäß beendet. Vielleicht mit Write-Host genauer hinschauen:

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

Es könnte verschiedene Ursachen haben. Ich kann nicht sagen, welche in Ihrem Fall vorhanden ist.

Im Folgenden können bestimmte Gründe angegeben werden:

  • DCOM ist auf dem Host-PC und dem Ziel-PC oder auf beiden nicht aktiviert.
  • Ihre Firewall oder sogar Ihr Antivirenprogramm verhindert den Zugriff.
  • Alle WMI-bezogenen Dienste sind deaktiviert.

Einige WMI-bezogene Dienste sind wie folgt:

  • Remote Access Auto Connection Manager
  • RAS-Verbindungs-Manager
  • Remote Procedure Call (RPC)
  • Remote Procedure Call (RPC) Locator
  • Fernregistrierung 

Für die DCOM-Einstellung siehe:

  • Schlüssel: HKLM\Software\Microsoft\OLE, Wert: EnableDCOM

Der Wert sollte auf 'Y' gesetzt werden.

11
Abhishek_Mishra

Ich hatte das gleiche Problem, aber nur mit ein paar Maschinen. Ich habe festgestellt, dass die Verwendung von Invoke-Command zum Ausführen des gleichen Befehls auf dem Remote-Server funktioniert hat.

Also statt: 

Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate

Benutze das:

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

Wenn Sie einige der Vorschläge in den anderen Antworten ausprobiert haben, vor allem:

  • Antwort von David Brabant: Die Bestätigung, dass die eingehende Firewall-Regel Windows Management Instrumentation (WMI) aktiviert ist, ist aktiviert 
  • Antwort von Abhi_Mishra: Die Bestätigung, dass DCOM in der Registry aktiviert ist

Dann betrachten Sie andere häufige Gründe , um diesen Fehler zu erhalten:

  • Das Remote-Gerät ist ausgeschaltet
  • Sie haben einen ungültigen Computernamen angegeben
  • Es gibt Probleme mit der Netzwerkverbindung zwischen Ihnen und dem Zielcomputer
1

Gelöst 

Ich habe die gleiche Fehlermeldung erhalten, als ich versuchte, das folgende Skript (teilweise) gegen ein entferntes VM auszuführen, das so konfiguriert wurde, dass es in der WORKGROUP steht.

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

Ich habe bemerkt, dass ich das Skript von einem anderen VM in derselben WORKGROUP ausführen konnte, wenn ich die Firewall deaktiviert habe, es aber immer noch nicht von einem Computer in der Domäne aus ausführen konnte. Diese beiden Dinge zusammen mit Stackflow-Vorschlägen haben mich zu folgender Lösung geführt:

Hinweis: Ändern Sie diese Einstellungen auf eigene Gefahr. Sie sollten die Sicherheitsauswirkungen dieser Änderungen verstehen, bevor Sie sie anwenden.

Auf dem Remote-Rechner:

  • Stellen Sie sicher, dass Sie die Firewall wieder aktivieren, wenn Sie sie während des Tests deaktiviert haben.
  • Führen Sie Enable-PSRemoting erfolgreich in PowerShell aus
  • Gehen Sie in wf.msc (Windows-Firewall mit erweiterter Sicherheit)
  • Stellen Sie sicher, dass die Private/Public-eingehende ' Windows-Verwaltungsinstrumentation (DCOM-In) ' aktiviert ist.UNDstellen Sie sicher, dass die Eigenschaft 'Remote Address' 'Any' oder etwas sicherer ist.
  • Stellen Sie sicher, dass die Private/Public-eingehende ' Windows-Verwaltungsinstrumentation (WMI-In) ' aktiviert ist.UNDstellen Sie sicher, dass die Eigenschaft 'Remote Address' 'Any' oder etwas sicherer ist.

Optional: Möglicherweise müssen Sie auch die folgenden Schritte ausführen, wenn Sie Befehle wie ' Enter-PSSession ' ausführen möchten.

  • Bestätigen Sie die Private/Public-eingehende ' Windows Management Instrumentation (ASync-In) ' -Regel ist aktiviertUNDStellen Sie sicher, dass die 'Remote Address'-Eigenschaft' Any 'oder etwas ist sicherer.
  • Öffnen Sie einen Inbound-Port TCP für 5985

WICHTIG! - Es dauert ungefähr zwei Minuten, bis die Remote-VM VM nach dem Neustart auf den 'Enter-PSSession'-Befehl reagiert, obwohl andere Netzwerkdienste ohne Probleme gestartet werden. Gib ein paar Minuten und versuche es dann.

Seite Hinweis: Bevor ich die Eigenschaft 'Remote Address' in 'Any' geändert habe, wurden beide Regeln auf 'Local Subnet' gesetzt.

1
GrayDwarf

Ich habe diesen Blogeintrag gefunden, in dem vorgeschlagen wurde, eine Firewall-Ausnahme für "Remoteverwaltung" hinzuzufügen, und dies funktionierte für uns auf unseren Windows Server 2008 Enterprise-Systemen.

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

1
Alan

Durch Aktivieren der folgenden FW-Regeln auf dem Zielsystem wurde das Problem unter Win2k16 behoben:

  • Windows Management Instrumentation (WMI-In)
  • Distributed Transaction Coordinator (RPC)
  • Distributed Transaction Coordinator (RPC-EPMAP)
1
Trebor

Ich hatte das gleiche Problem mit foreach. Ich habe die Liste auf $ Servern gespeichert und diese verwendet, was funktioniert:

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

Das Abschalten der Firewall löste es für mich.

0
Ayan Mullick

Ich hatte das gleiche Problem, und ich habe versucht, eine IP-Adresse anstelle des Computernamens zu verwenden. Fügen Sie dies einfach als eine weitere potenzielle Lösung für die Menschen hinzu, die dies auf der Straße finden.

0
NealWalters

Ich möchte hinzufügen, dass wir dieses Problem auch mit mehreren Rechnern in unserer Domäne hatten. Ich erstellte eine Liste der fehlerhaften Maschinen und fügte sie einer Textdatei hinzu, aus der das Skript ausgeführt werden sollte. Ich habe dies vom CMD-Prompt aus mit erhöhten Berechtigungen ausgeführt.

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

Ich sah mich mit dem ähnlichen Problem auf einem neuen Server konfrontiert, den ich mithilfe von automatisierten Skripten über vcenter api erstellt habe. Anscheinend wird der Dienst "Remote Procedure Call (RPC)" möglicherweise nicht auf dem Remotecomputer ausgeführt. Sie müssen warten, bis der Dienst aufgerufen wird, um den Befehl Get-WmiObject zu verwenden. Daher habe ich das Skript einfach für einige Zeit in den Ruhezustand versetzt und es hat funktioniert.

0
RajaV