user1501778
user1501778

Reputation: 521

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

When I run

Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber

it works for both local and remote hosts.

When I do this for a list of hosts using

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

it returns

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

Upvotes: 52

Views: 351286

Answers (21)

Register WMI DLL files: Run the commands in cmd.

regsvr32 %windir%\system32\wbem\wmidcprv.dll
regsvr32 %windir%\system32\wbem\wbemprox.dll

Register MOF (Management Object Format) files:

Run the following commands to ensure that MOF files are correctly registered:

mofcomp %windir%\system32\wbem\wmiprvsd.mof
mofcomp %windir%\system32\wbem\cimwin32.mof

In my case, one of the files was missing and I followed the next step:

Restore Corrupted System Files with DISM and SFC Since the MOF file is missing, it could indicate that other important files are also missing or corrupted. Let's try to use SFC and DISM tools to fix the system:

Run SFC (System File Checker):

In Command Prompt as Administrator, run the following command:

sfc /scannow

After finishing, just restart the computer, but first run:

netsh advfirewall firewall add rule name="Allow WMI" protocol=TCP dir=in localport=135,49152-65535 action=allow

To open WMI ports.

Upvotes: 0

jimhark
jimhark

Reputation: 5056

Your code probably isn't using a correct machine name, you should double check that.

Your error is:

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

This is the result you get when a machine is not reachable. So the firewall suggestions are reasonable, but in this case probably not correct because you say this works:

Get-WmiObject win32_SystemEnclosure -Computer hostname

So in your case it seems when this line is executed:

Get-WmiObject win32_SystemEnclosure -Computer $_

$_ doesn't contain a proper computer name. You could check type and contents of $_. Probably there is a problem with the file contents. If the file looks right, then maybe the lines are not properly terminated. You can take a closer look using 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}}
}

Upvotes: 18

Allan
Allan

Reputation: 140

Port 135 will be used by RPC client- server communication.

So Make sure that port 135 is not blocked by your local firewall. It may be one of the reasons for not working.

Here's a link that could help you: https://www.dell.com/support/kbdoc/en-in/000179474/troubleshooting-rpc-server-unavailable-errors

Upvotes: 0

Rosski
Rosski

Reputation: 72

I thought I would add another thing to try. If someone has multiple domains you could try using fully qualified domain names: computer1.subdomain.domain.com

Upvotes: 0

Tomking Chen
Tomking Chen

Reputation: 363

I encountered the same "Exception from HRESULT: 0x800706BA" error with get-wmiobject -computerName remoteserverName -class win32_logicaldisk. The remote server is an AWS EC2 instance in my case. The Windows server firewall has WMI ports open. SecurityGroup attached to the EC2 instance has common RPC ports (tcp/udp 135-139, 49152 - 65535) inbound allowed.

I then ran netstat -a -b |findstr remoteServerName after kick off the get-wmiobject powershell command. Turns out the command was trying hit tcp port 6402 on the remote server! After added tcp 6402 into its Security Group inbound rule, get-wmiobject works perfectly! It appears the remote server has WMI set to a fixed port!

So if you checked all usual firewall rules and stil having problem with WMI, try use netstat to identify which port the command is actually trying to hit.

Upvotes: 0

SunsetQuest
SunsetQuest

Reputation: 8877

Very odd but I used the IP address (vs the hostname) and it worked for me.

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

Get-WmiObject -Computername 50.50.50.50
 [Successful]

Upvotes: 0

user11510624
user11510624

Reputation: 1

Below is the native PowerShell command for the most up-voted solution. Instead of: netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes

Use could use the slightly simpler syntax of:

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

Upvotes: 0

RajaV
RajaV

Reputation: 11

I faced the similar issue on new server that I built through automated scripts via vcenter api. Looks like the "Remote Procedure Call (RPC)" service may not be running on the remote machine. you need to wait for the service to come up to use the Get-WmiObject command. Hence I simply put the script into sleep for sometime and it worked.

Upvotes: 0

NealWalters
NealWalters

Reputation: 18227

I had same issue, and for me, I was trying to use an IP Address instead of computer name. Just adding this as one more potential solution for people finding this down the road.

Upvotes: 0

sxm1972
sxm1972

Reputation: 752

I was having the same problem but only with a few machines. I found that using Invoke-Command to run the same command on the remote server worked.

So instead of:

Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate

Use this:

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

Upvotes: 10

Abhishek_Mishra
Abhishek_Mishra

Reputation: 4621

It might be due to various issues.I cant say which one is there in your case.

Below given reasons may be there:

  • DCOM is not enabled in host PC or target PC or on both.
  • Your Firewall or even your antivirus is preventing the access.
  • Any WMI related service is disabled.

Some WMI related services are as given:

  • Remote Access Auto Connection Manager
  • Remote Access Connection Manager
  • Remote Procedure Call (RPC)
  • Remote Procedure Call (RPC) Locator
  • Remote Registry

For DCOM setting refer:

  • Key: HKLM\Software\Microsoft\OLE, Value: EnableDCOM

The value should be set to 'Y' .

Upvotes: 18

Jan Nevařil
Jan Nevařil

Reputation: 11

I was doing this mistake

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

Which, of course, couldn't be passed, because output of the server in a csv file was @{Name=hv1g.contoso.com}

I had to call the property from csv file like this $server.Name

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

It fixed my issue.

Upvotes: -1

Trebor
Trebor

Reputation: 23

Enabling following FW rules on target system resolved the problem on Win2k16:

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

Upvotes: 2

Eric
Eric

Reputation: 11

I was having the same issue using foreach. I saved the list to $servers and used this which worked:

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

Upvotes: 1

GrayDwarf
GrayDwarf

Reputation: 2757

Solved.

I was running into the exact same error message when trying to execute the following script (partial) against a remote VM that was configured to be in the WORKGROUP.

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

I noticed I could run the script from another VM in the same WORKGROUP when I disabled the firewall but still couldn't do it from a machine on the domain. Those two things along with Stackflow suggestions is what brought me to the following solution:

Note: Change these settings at your own risk. You should understand the security implications of these changes before applying them.

On the remote machine:

  • Make sure you re-enable your Firewall if you've disabled it during testing.
  • Run Enable-PSRemoting from PowerShell with success
  • Go into wf.msc (Windows Firewall with Advanced Security)
  • Confirm the Private/Public inbound 'Windows Management Instrumentation (DCOM-In)' rule is enabled AND make sure the 'Remote Address' property is 'Any' or something more secure.
  • Confirm the Private/Public inbound 'Windows Management Instrumentation (WMI-In)' rule is enabled AND make sure the 'Remote Address' property is 'Any' or something more secure.

Optional: You may also need to perform the following if you want to run commands like 'Enter-PSSession'.

  • Confirm the Private/Public inbound 'Windows Management Instrumentation (ASync-In)' rule is enabled AND make sure the 'Remote Address' property is 'Any' or something more secure.
  • Open up an Inbound TCP port to 5985

IMPORTANT! - It's taking my remote VM about 2 minutes or so after it reboots to respond to the 'Enter-PSSession' command even though other networking services are starting up without problems. Give it a couple minutes and then try.

Side Note: Before I changed the 'Remote Address' property to 'Any', both of the rules were set to 'Local subnet'.

Upvotes: 3

hungry4pwr
hungry4pwr

Reputation: 11

Thought I would add that we also ran into this issue with multiple machines in our domain. I created a list of offending machines and added them all to a text file from which to run the script. I ran this from the CMD prompt using elevated privileges.

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

Upvotes: 1

I say Reinstate Monica
I say Reinstate Monica

Reputation: 518

If you've tried some of the suggestions in the other answers, most notably:

  • David Brabant's answer: confirming the Windows Management Instrumentation (WMI) inbound firewall rule is enabled
  • Abhi_Mishra's answer: confirming DCOM is enabled in the Registry

Then consider other common reasons for getting this error:

  • The remote machine is OFF
  • You specified an invalid computer name
  • There are network connectivity problems between you and the target computer

Upvotes: 3

Alan
Alan

Reputation: 3745

I found this blog post which suggested adding a firewall exception for "Remote Administration", and that worked for us on our Windows Server 2008 Enterprise systems.

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

Upvotes: 2

David Brabant
David Brabant

Reputation: 43619

Check that the "Windows Management Instrumentation (WMI-In)" rule is enabled in the firewall for each remote machine.

Or in an Administrative Command/Powershell prompt run:

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

Upvotes: 44

Ayan Mullick
Ayan Mullick

Reputation: 162

Turning the firewall off resolved it for me.

Upvotes: -1

Anthony Houssa
Anthony Houssa

Reputation: 5

I just came to the exact same issue and found the answer here: http://powershellcommunity.org/Forums/tabid/54/aft/7537/Default.aspx

I had space characters at the end of each line the input file. If your file does too, just remove them and your script should work.

Upvotes: -2

Related Questions