Get-WmiObject : de RPC-server is niet beschikbaar. (Uitzondering op HRESULT: 0x800706BA)

Als ik hardloop

Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber

het werkt voor zowel lokale als externe hosts.

Als ik dit doe voor een lijst met hosts met

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

het keert terug

Get-WmiObject: de RPC-server is niet beschikbaar. (Uitzondering op HRESULT: 0x800706BA)


Antwoord 1, autoriteit 100%

Controleer of de regel “Windows Management Instrumentation (WMI-In)” is ingeschakeld in de firewall voor elke externe computer.

Of in een administratieve opdracht/Powershell-prompt:

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

Antwoord 2, autoriteit 45%

Het kan te wijten zijn aan verschillende problemen. Ik kan niet zeggen welke er in jouw geval is.

Hieronder gegeven redenen kunnen er zijn:

  • DCOM is niet ingeschakeld op host-pc of doel-pc of op beide.
  • Uw firewall of zelfs uw antivirusprogramma verhindert de toegang.
  • Elke WMI-gerelateerde service is uitgeschakeld.

Sommige WMI-gerelateerde services zijn zoals aangegeven:

  • Remote Access Auto Connection Manager
  • Verbindingsbeheer op afstand
  • Remote Procedure Call (RPC)
  • Remote Procedure Call (RPC) Locator
  • Register op afstand

Zie voor DCOM-instellingen:

  • Sleutel: HKLM\Software\Microsoft\OLE, Waarde: EnableDCOM

De waarde moet worden ingesteld op ‘Y’.


Antwoord 3, autoriteit 42%

Uw code gebruikt waarschijnlijk niet de juiste machinenaam, u moet dat nog eens controleren.

Uw fout is:

Get-WmiObject: de RPC-server is niet beschikbaar. (Uitzondering op HRESULT: 0x800706BA)

Dit is het resultaat dat u krijgt als een machine niet bereikbaar is. Dus de firewall-suggesties zijn redelijk, maar in dit geval waarschijnlijk niet correct omdat je zegt dat dit werkt:

Get-WmiObject win32_SystemEnclosure -Computer hostname

Dus in jouw geval lijkt het wanneer deze regel wordt uitgevoerd:

Get-WmiObject win32_SystemEnclosure -Computer $_

$_ bevat geen juiste computernaam. U kunt het type en de inhoud van $_ controleren. Waarschijnlijk is er een probleem met de inhoud van het bestand. Als het bestand er goed uitziet, zijn de regels misschien niet correct beëindigd. Misschien eens nader bekijken met 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}}
}

Antwoord 4, autoriteit 24%

Ik had hetzelfde probleem, maar alleen met een paar machines. Ik ontdekte dat het gebruiken van Invoke-Command om dezelfde opdracht uit te voeren op de externe server werkte.

Dus in plaats van:

Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate

Gebruik dit:

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

Antwoord 5, autoriteit 8%

Als je enkele van de suggesties in de andere antwoorden hebt geprobeerd, met name:

  • Het antwoord van David Brabant: bevestigen dat de Windows Management Instrumentation (WMI)inkomende firewallregel is ingeschakeld
  • Abhi_Mishra’s antwoord: bevestigen dat DCOM is ingeschakeld in het register

Overweeg dan andere veelvoorkomende redenenvoor het krijgen van deze fout:

  • Het externe apparaat is UIT
  • U heeft een ongeldige computernaam opgegeven
  • Er zijn netwerkverbindingsproblemen tussen u en de doelcomputer

Antwoord 6, autoriteit 8%

Opgelost.

Ik kwam exact dezelfde foutmelding tegen toen ik probeerde het volgende script (gedeeltelijk) uit te voeren op een externe VM die was geconfigureerd om in de WORKGROUPte staan.

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

Ik merkte dat ik het script vanaf een andere VM in dezelfde WORKGROUP kon uitvoeren toen ik de firewall uitschakelde, maar het nog steeds niet kon doen vanaf een machine in het domein. Die twee dingen samen met Stackflow-suggesties hebben me tot de volgende oplossing gebracht:

Opmerking: Wijzig deze instellingen op eigen risico. U dient de beveiligingsimplicaties van deze wijzigingen te begrijpen voordat u ze toepast.

Op het externe apparaat:

  • Zorg ervoor dat u uw firewall opnieuw inschakelt als u deze tijdens het testen heeft uitgeschakeld.
  • Voer Enable-PSRemoting met succes uit vanuit PowerShell
  • Ga naar wf.msc (Windows Firewall met geavanceerde beveiliging)
  • Controleer of de Private/Public inbound regel ‘Windows Management Instrumentation (DCOM-In)‘ is ingeschakeld ENzorg ervoor dat de eigenschap ‘Extern adres’ op ‘Any’ of iets veiliger.
  • Controleer of de privé/openbare inkomende regel ‘Windows Management Instrumentation (WMI-In)‘ is ingeschakeld ENzorg ervoor dat de eigenschap ‘Extern adres’ ‘Any’ of iets veiliger.

Optioneel:u moet mogelijk ook het volgende uitvoeren als u opdrachten zoals ‘Enter-PSSession‘ wilt uitvoeren.

  • Bevestig de Private/Public inbound ‘Windows Management
    Instrumentatie (ASync-In)
    ‘ regel is ingeschakeld ENzorg ervoor dat de
    De eigenschap ‘Extern adres’ is ‘Elke’ of iets veiliger.
  • Open een inkomende TCP-poort naar 5985

BELANGRIJK!– Het duurt ongeveer 2 minuten nadat mijn externe VM opnieuw is opgestart om te reageren op het ‘Enter-PSSession’-commando, ook al starten andere netwerkservices zonder problemen op. Geef het een paar minuten en probeer het dan.

Side Note:Voordat ik de eigenschap ‘Extern adres’ veranderde in ‘Elke’, waren beide regels ingesteld op ‘Lokaal subnet’.


Antwoord 7, autoriteit 5%

Ik vond dit blogbericht waarin werd voorgesteld om een firewall-uitzondering toe te voegen voor “Remote Administration”, en dat werkte voor ons op onze Windows Server 2008 Enterprise-systemen.

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


Antwoord 8, autoriteit 5%

Het inschakelen van de volgende FW-regels op het doelsysteem loste het probleem op Win2k16 op:

  • Windows Management Instrumentation (WMI-In)
  • Distribiuted Transaction Coordinator (RPC)
  • Distribiuted Transaction Coordinator (RPC-EPMAP)

Antwoord 9, autoriteit 3%

Ik had hetzelfde probleem bij het gebruik van foreach. Ik heb de lijst opgeslagen op $servers en deze gebruikt die werkte:

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

Antwoord 10

Ik dacht eraan toe te voegen dat we dit probleem ook tegenkwamen met meerdere machines in ons domein. Ik heb een lijst met aanstootgevende machines gemaakt en ze allemaal toegevoegd aan een tekstbestand om het script uit te voeren. Ik heb dit uitgevoerd vanaf de CMD-prompt met verhoogde rechten.

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

Antwoord 11

Ik had hetzelfde probleem en ik probeerde een IP-adres te gebruiken in plaats van een computernaam.
Voeg dit gewoon toe als nog een mogelijke oplossing voor mensen die dit op de weg vinden.


Antwoord 12

Ik kreeg te maken met hetzelfde probleem op een nieuwe server die ik heb gebouwd met geautomatiseerde scripts via vcenter api. Het lijkt erop dat de service “Remote Procedure Call (RPC)” niet actief is op de externe computer. u moet wachten tot de service verschijnt om de opdracht Get-WmiObject te gebruiken. Daarom heb ik het script gewoon een tijdje in de slaapstand gezet en het werkte.


Antwoord 13

Hieronder staat de native PowerShell-opdracht voor de oplossing met de meeste stemmen.
In plaats van:
netsh advfirewall firewall set rule group=”Windows Management Instrumentation (WMI)” new enable=yes

Gebruik kan de iets eenvoudigere syntaxis gebruiken van:

Enable-NetFirewallRule -DisplayGroup "Windows Management Instrumentation (WMI-In)"


Antwoord 14

Heel vreemd, maar ik gebruikte het IP-adres (versus de hostnaam) en het werkte voor mij.

Get-WmiObject -Computername MyHostName ...  
 [Fails: Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)]
Get-WmiObject -Computername 50.50.50.50
 [Successful]

Antwoord 15

Ik ben dezelfde “Uitzondering van HRESULT: 0x800706BA” tegengekomen met get-wmiobject -computerName remoteserverName -class win32_logicaldisk. De externe server is in mijn geval een AWS EC2-instantie. De firewall van de Windows-server heeft WMI-poorten open. SecurityGroup gekoppeld aan de EC2-instantie heeft gemeenschappelijke RPC-poorten (tcp/udp 135-139, 49152 – 65535) inkomend toegestaan.

Vervolgens heb ik netstat -a -b |findstr remoteServerNameuitgevoerd nadat ik het powershell-commando get-wmiobjecthad gestart. Blijkt dat de opdracht probeerde tcp-poort 6402 op de externe server te raken! Nadat tcp 6402 is toegevoegd aan de regel voor inkomend verkeer van de beveiligingsgroep, werkt get-wmiobject perfect! Het lijkt erop dat de externe server WMI heeft ingesteld op een vaste poort!

Dus als je alle gebruikelijke firewallregels hebt gecontroleerd en nog steeds problemen hebt met WMI, probeer dan netstat te gebruiken om te bepalen welke poort de opdracht daadwerkelijk probeert te raken.


Antwoord 16

Het uitschakelen van de firewall loste het voor mij op.


Antwoord 17

Ik maakte deze fout

ForEach ($server in $servers) {
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server
}

Wat natuurlijk niet kon, omdat de uitvoer van de server in een csv-bestand @{Name=hv1g.contoso.com}

was

Ik moest de eigenschap aanroepen vanuit het csv-bestand zoals dit $server.Name

ForEach ($server in $servers) {
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server.Name
}

Mijn probleem is opgelost.


Antwoord 18

Ik kwam net op exact hetzelfde probleem uit en vond het antwoord hier: http://powershellcommunity.org/Forums/tabid/54/aft/7537/Default.aspx

Ik had spatietekens aan het einde van elke regel van het invoerbestand. Als je bestand dat ook doet, verwijder ze dan en je script zou moeten werken.

Other episodes