当我跑步时
Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber
它适用于本地和远程主机。
当我使用
为主机列表执行此操作时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}}
}
它返回
Get-WmiObject:RPC服务器不可用。 (HRESULT异常:0x800706BA)
答案 0 :(得分:31)
检查防火墙中是否为每台远程计算机启用了“Windows Management Instrumentation(WMI-In)”规则。
或者在Administrative Command / Powershell提示符下运行:
netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes
答案 1 :(得分:13)
您的代码可能没有使用正确的机器名称,您应该仔细检查。
您的错误是:
Get-WmiObject:RPC服务器不可用。 (HRESULT异常:0x800706BA)
这是机器无法访问时获得的结果。因此防火墙建议是合理的,但在这种情况下可能不正确,因为你说这有效:
Get-WmiObject win32_SystemEnclosure -Computer hostname
因此,在您的情况下,执行此行时似乎:
Get-WmiObject win32_SystemEnclosure -Computer $_
$ _不包含正确的计算机名称。您可以检查$ _的类型和内容。可能是文件内容有问题。如果文件看起来正确,那么可能没有正确终止这些行。也许使用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}}
}
答案 2 :(得分:11)
可能是由于各种问题。我不能说你的案件中有哪一个。
下面给出的原因可能是:
一些与WMI相关的服务如下:
对于DCOM设置,请参阅:
HKLM\Software\Microsoft\OLE
,价值:EnableDCOM
该值应设置为“Y”。
答案 3 :(得分:2)
我遇到了同样的问题但只有几台机器。我发现使用Invoke-Command在远程服务器上运行相同的命令。
所以而不是:
Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate
使用此:
Invoke-Command -ComputerName $hostname -Authentication Negotiate -ScriptBlock {Get-WmiObject win32_SystemEnclosure}
答案 4 :(得分:1)
我使用foreach遇到了同样的问题。我将列表保存到$ servers并使用了这个工作:
ForEach ($_ in $Servers) { Write-Host "Host $($_)" | Get-WmiObject win32_SystemEnclosure -Computer $_ | format-table -auto @{Label="Service Tag"; Expression={$_.serialnumber}}
}
答案 5 :(得分:1)
在目标系统上启用以下FW规则解决了Win2k16上的问题:
答案 6 :(得分:1)
解决。
尝试针对配置为在WORKGROUP 中的远程 VM执行以下脚本(部分)时,我遇到了完全相同的错误消息。
Restart-Computer -ComputerName MyComputer -Authentication Default -Credential $cred -force
我注意到当我禁用防火墙但仍无法通过域上的计算机执行此操作时,我可以在同一个WORKGROUP中从另一个VM运行该脚本。这两件事以及Stackflow建议是我带来以下解决方案的原因:
注意:更改这些设置需要您自担风险。在应用这些更改之前,您应该了解这些更改的安全含义。
在远程计算机上:
可选:如果您想要运行' Enter-PSSession '等命令,您可能还需要执行以下操作。
重要! - 重新启动后,我的远程虚拟机大约需要2分钟才能响应“输入PSSession”#39;即使其他网络服务正在启动而没有问题。给它几分钟,然后尝试。
旁注:在我更改“远程地址”之前属性为'任何',这两个规则都设置为'本地子网'。
答案 7 :(得分:1)
如果你在其他答案中尝试了一些建议,最值得注意的是:
Windows Management Instrumentation (WMI)
入站防火墙规则已启用然后考虑其他常见原因来获取此错误:
答案 8 :(得分:1)
我发现此博客文章建议为“远程管理”添加防火墙例外,这对我们的Windows Server 2008 Enterprise系统起作用。
答案 9 :(得分:0)
我想我会补充一点,我们在域中遇到了多台机器。我创建了一个违规机器列表,并将它们全部添加到运行脚本的文本文件中。我使用提升的权限从CMD提示符运行它。
psexec @firewallFix.txt -d netsh advfirewall firewall
set rule name="Windows Management Instrumentation (WMI-In)"
profile=domain new enable=yes profile=domain
答案 10 :(得分:0)
关闭防火墙解决了它。
答案 11 :(得分:0)
我在通过vcenter api通过自动化脚本构建的新服务器上遇到了类似问题。看起来“远程过程调用(RPC)”服务可能未在远程计算机上运行。您需要等待服务启动才能使用Get-WmiObject命令。因此,我只是将该脚本放了一段时间,就可以了。
答案 12 :(得分:0)
我遇到了同样的问题,对我来说,我试图使用IP地址而不是计算机名。 只是将其添加为人们发现此问题的另一种潜在解决方案。
答案 13 :(得分:0)
下面是投票最多的解决方案的本机PowerShell命令。 代替: netsh advfirewall防火墙设置规则组=“ Windows Management Instrumentation(WMI)”新enable =是
使用可以使用以下更简单的语法:
Enable-NetFirewallRule -DisplayGroup "Windows Management Instrumentation (WMI-In)"
答案 14 :(得分:0)
很奇怪,但我使用的是IP地址(相对于主机名),并且对我有用。
Get-WmiObject -Computername MyHostName ...
[Fails: Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)]
Get-WmiObject -Computername 50.50.50.50
[Successful]
答案 15 :(得分:0)
我遇到了与 get-wmiobject -computerName remoteserverName -class win32_logicaldisk
相同的“来自 HRESULT 的异常:0x800706BA”错误。在我的例子中,远程服务器是一个 AWS EC2 实例。 Windows 服务器防火墙打开了 WMI 端口。附加到 EC2 实例的安全组具有允许入站的公共 RPC 端口(tcp/udp 135-139、49152 - 65535)。
然后我在启动 netstat -a -b |findstr remoteServerName
powershell 命令后运行了 get-wmiobject
。原来该命令试图在远程服务器上点击 tcp 端口 6402!将 tcp 6402 添加到其安全组入站规则后,get-wmiobject 完美运行!看来远程服务器已将 WMI 设置为固定端口!
因此,如果您检查了所有常用的防火墙规则并且仍然遇到 WMI 问题,请尝试使用 netstat 来确定命令实际尝试访问的端口。
答案 16 :(得分:-1)
我刚刚遇到完全相同的问题并在此处找到答案:http://powershellcommunity.org/Forums/tabid/54/aft/7537/Default.aspx
我在输入文件的每一行末尾都有空格字符。如果您的文件也是如此,只需删除它们,您的脚本就可以正常工作。
答案 17 :(得分:-2)
我犯了这个错误
ForEach ($server in $servers) {
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server
}
当然,无法传递,因为csv文件中服务器的输出是@ {Name = hv1g.contoso.com}
我必须从csv文件中调用属性,如$ server.Name
ForEach ($server in $servers) {
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server.Name
}
它解决了我的问题。