我目前正在编写一个从服务器查询磁盘信息的脚本。我遇到了一个问题,我真的不知道这里发生了什么。愿你能帮助我。
以下代码有效(已替换 ComputerName):
$space1 = Invoke-Command -ComputerName "xxxxxx" -ScriptBlock {
Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID='C:'"
}
这段代码运行得很好,可能需要大约 2 秒的时间来执行。
经过一些实验,我找到了一种可以更快地查询它的方法。对于所有其他服务器,它工作正常,但对于此服务器,它根本不起作用。这是代码:
$space1 = Get-WmiObject -ComputerName "xxxxxx" -Class Win32_LogicalDisk -Filter "DeviceID='C:'"
此代码运行大约需要 40 秒,然后以以下错误结束:
Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT:
0x800706BA)
At line:1 char:10
+ $test1 = Get-WmiObject -ComputerName "xxxxxx" -Class Win32_LogicalD ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
有人可以向我解释为什么它可以正常工作吗Invoke-Command
但当我使用时不是ComputerName
参数在Get-WmiObject
直接地?如前所述,对于我的所有其他服务器,这工作正常并且代码速度更快,因此我希望始终使用此代码。
到目前为止我所做的:
- 我检查了 DNS 服务器并测试了类似的命令。
- 尝试了其他一些 WmiObject 命令,似乎 RPC 始终不可用。
我认为问题可能是:
我认为服务器上禁用了 RPC 协议。有人知道如何检查吗?通过 Google 还没有找到任何有效的东西......
看起来特别的地方:
CimInstance 命令有效。他们也使用 RPC 协议,还是使用其他协议?还没找到这方面的信息。这是我测试的代码:
Get-CimInstance -ComputerName "ccccc" -ClassName Win32_OperatingSystem