【发布时间】:2018-07-09 01:29:16
【问题描述】:
我目前正在编写一个从服务器查询磁盘信息的脚本。我遇到了一个问题,我真的不知道这里发生了什么。愿你能帮助我。
以下代码正在运行(计算机名已替换):
$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 : RPC 服务器不可用。 (HRESULT 的例外情况: 0x800706BA) 在行:1 字符:10 + $test1 = Get-WmiObject -ComputerName "xxxxxx" -Class Win32_LogicalD ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException + FullyQualifiedErrorId:GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand有人可以向我解释为什么它可以很好地与Invoke-Command 一起使用,但当我直接在Get-WmiObject 上使用ComputerName 参数时却不行?如前所述,对于我所有的其他服务器,这工作正常,代码更快,所以我想一直使用这个代码。
到目前为止我做了什么:
- 我检查了服务器的 DNS 并测试了类似的命令。
- 尝试了其他一些 WmiObject 命令,似乎总是 RPC 不可用。
我认为问题可能是:
我认为服务器上的 RPC 协议已禁用。有人知道如何检查吗?还没有找到真正通过 Google 工作的东西...
看起来很特别:
CimInstance 命令有效。他们是否也使用 RPC 协议,还是使用其他协议?没有找到关于那个的任何信息。这里是我测试的代码:
Get-CimInstance -ComputerName "ccccc" -ClassName Win32_OperatingSystem
【问题讨论】:
-
我看起来像是 COM 的权限问题。
标签: powershell wmi rpc powershell-remoting