Get-WmiObject:RPC服务器不可用.(HRESULT异常:0x800706BA)

use*_*778 40 powershell

我跑的时候

Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber
Run Code Online (Sandbox Code Playgroud)

它适用于本地和远程主机.

当我为使用的主机列表执行此操作时

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}}
}
Run Code Online (Sandbox Code Playgroud)

它返回

Get-WmiObject:RPC服务器不可用.(HRESULT异常:0x800706BA)

Dav*_*ant 34

检查防火墙中是否为每台远程计算机启用了"Windows Management Instrumentation(WMI-In)"规则.

或者在Administrative Command/Powershell提示符下运行:

netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes
Run Code Online (Sandbox Code Playgroud)


jim*_*ark 14

您的代码可能没有使用正确的机器名称,您应该仔细检查.

你的错误是:

Get-WmiObject:RPC服务器不可用.(HRESULT异常:0x800706BA)

这是机器无法访问时获得的结果.所以防火墙的建议是合理的,但在这种情况下可能不正确,因为你说这是有效的:

Get-WmiObject win32_SystemEnclosure -Computer hostname
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下似乎执行这一行:

Get-WmiObject win32_SystemEnclosure -Computer $_
Run Code Online (Sandbox Code Playgroud)

$ _不包含正确的计算机名称.您可以检查$ _的类型和内容.可能是文件内容有问题.如果文件看起来正确,那么可能没有正确终止这些行.也许使用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}}
}
Run Code Online (Sandbox Code Playgroud)


Abh*_*hra 13

这可能是由于各种问题.我不能说你的案件中有哪一个.

以下给出的原因可能是:

  • 主机PC或目标PC或两者都未启用DCOM.
  • 您的防火墙甚至您的防病毒软件都阻止了访问.
  • 任何与WMI相关的服务都被禁用.

一些与WMI相关的服务如下:

  • 远程访问自动连接管理器
  • 远程访问连接管理器
  • 远程过程调用(RPC)
  • 远程过程调用(RPC)定位器
  • 远程注册表

对于DCOM设置,请参阅:

  • 关键:HKLM\Software\Microsoft\OLE,价值:EnableDCOM

该值应设置为"Y".


sxm*_*972 10

我遇到了同样的问题,但只有几台机器。我发现使用 Invoke-Command 在远程服务器上运行相同的命令是有效的。

所以而不是:

Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate
Run Code Online (Sandbox Code Playgroud)

用这个:

Invoke-Command -ComputerName $hostname -Authentication Negotiate -ScriptBlock {Get-WmiObject win32_SystemEnclosure}
Run Code Online (Sandbox Code Playgroud)