通过VBScript和PowerShell使用WMI时的差异

时间:2011-07-30 14:06:42

标签: powershell vbscript wmi

我有一个测试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。为什么会这样?

1 个答案:

答案 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