我有一个测试Windows XP SP3干净安装与电源外壳。如果我从PowerShell和VBScript访问WMI,这是一个非常奇怪的区别。来自powershell:
Get-WmiObject 'Win32_OperatingSystem" | select Caption
这正确显示“Windows XP Professional”。和编写为VBScript的代码相同:
WScript.Echo( GetObject( "winmgmts:Win32_OperatingSystem" ).Caption )
显示“null”O_O。为什么会这样?
答案 0 :(得分:5)
这是VBScript的等价物:
Set wmi = GetObject("winmgmts:")
Set objSet = wmi.InstancesOf("Win32_OperatingSystem")
For Each obj in objSet
WScript.Echo obj.Caption
Exit For
Next
虽然只有一个操作系统,但WMI查询始终返回一个列表。
好了,现在,差异 - 使用Get-WmiObject
cmdlet,因为只有一个操作系统,当你执行Get-WmiObject "Win32_OperatingSystem"
时,你直接得到对象而不是列表(使用GetType来查看这实际上是System.Management.ManagementObject
)
由于会有多个进程,get-wmiobject win32_process
会给出一个数组。 (使用GetType查看此类型为System.Object[]
以下内容不会给出任何结果:
(get-wmiobject win32_process).Caption
以下是:
(get-wmiobject win32_process)[0].Caption