Powershell 中远程计算机上的 WMI 查询

我想在远程计算机上运行查询(例如 CIM_Memory),在这种情况下它是虚拟机。我在 Powershell 中使用此代码:

Get-WmiObject CIM_Memory -ComputerName IPADDRESS -Credential USERNAME

当然有一个实际的 IP 和用户名。 RemoteAdmin 在两个操作系统(都是 Win7)上启用。

我得到了这个例外:

Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)

由于它是具有 UAC 功能的 Win7,因此用户会获得一个访问令牌。所以有这个注册表项:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem LocalAccountTokenFilterPolicy

将其设置为 1 后,仍然得到相同的异常。可能是什么问题呢?

stack overflow WMI query on a Remote Machine in Powershell
原文答案

答案:

作者头像

您是否阅读了 MSDN 上的 WMI Troubleshooting 部分?这是关于您的错误的说法:

0x80070005 - E_ACCESS_DENIED - DCOM 安全拒绝访问。

用户无法通过 DCOM 远程访问计算机。通常,当连接到具有不同操作系统版本的远程计算机时,会发生 DCOM 错误。

在 dcomcnfg 中授予用户远程启动和远程激活权限。右键单击我的电脑-> 属性 在 COM 安全下,单击两个部分的“编辑限制”。给您想要远程访问、远程启动和远程激活的用户。然后去DCOM Config,找到“Windows Management Instrumentation”,给你想要远程启动和远程激活的用户。有关更多信息,请参阅在不同操作系统之间连接

作者头像

如果可以,强烈建议您启用 ps 远程处理。这样您就可以告诉目标计算机运行本地 wmi 调用并向您报告。

当涉及到防火墙、随机端口时,WMI 有很多问题。

作者头像

我第二次启用 psremoting,然后您可以使用 wsman 协议而不是 dcom 协议,并使用 get-ciminstance 代替,或者调用命令。

作者头像

如果启用 psremoting,看起来 get-ciminstance 也适用于 wsman。

Get-Ciminstance CIM_Memory -ComputerName IPADDRESS