无法通过 GETOBJECT("winmgmts:" ) 获取 WMI 对象

DRa*_*app 4 wmi

我很困惑,似乎找不到明确的答案。我正在尝试通过 WMI 获取网络适配器列表。我一直在使用的命令在我们办公室的几乎所有工作站上都​​运行良好,没有任何问题。昨天,问题。一台机器出现故障。由于它直接在用户计算机上运行,​​因此我不必显式输入他们的计算机名称,因此只需使用“.”。对于本地机器。然后,我不关心“谁”,所以也不存在冒充行为。用户应该能够查询自己的设备资源。我使用的是...

oWMIService = GETOBJECT("winmgmts:\\.\root\cimv2")
oItems = oWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
Run Code Online (Sandbox Code Playgroud)

根据我的发现,有些地方说要删除机器路径引用的“\”。如果我这样做,我的机器就会失败,而另一台有问题的机器上仍然没有结果。所以,我什至尝试直接进入该服务的根目录,但也失败了。

oWMIService = GETOBJECT("winmgmts:\\.")
Run Code Online (Sandbox Code Playgroud)

我得到的实际错误是......

Error Code: 0x800401ea: Moniker cannot open file.
Run Code Online (Sandbox Code Playgroud)

我已经对此绰号错误进行了一些搜索,但不知道如何解决。

ewa*_*all 5

有时 WMI 会被损坏和混乱。您可以尝试的选项有:

使用如下批处理脚本重新注册/重新编译 WMI 组件:

net stop winmgmt
cd /d %windir%\system32\wbem\
for %i in (*.dll) do RegSvr32 /s %i
for %i in (*.mof, *.mfl) do Mofcomp %i
net start winmgmt
Run Code Online (Sandbox Code Playgroud)

如果这不能解决问题,请使用此批处理重置 WMI 数据库:

net stop winmgmt
cd /d %windir%\system32\wbem\
rmdir /s /q Repository
rmdir /s /q Logs
mkdir Logs
net start winmgmt
Run Code Online (Sandbox Code Playgroud)

和/或尝试使用WMIDiag.vbs 脚本等工具,看看它是否能为您提供建议。