我有一个带有 Power Shell 的 Windows XP SP3 全新安装测试。如果我从 PowerShell 和 VBScript 访问 WMI,这是一个非常奇怪的区别。来自 powershell:
Get-WmiObject 'Win32_OperatingSystem" | select Caption
这会正确显示“Windows XP Professional”。以及用 VBScript 编写的相同代码:
WScript.Echo( GetObject( "winmgmts:Win32_OperatingSystem" ).Caption )
显示“空”O_O。为什么会这样?
最佳答案
这是 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
关于powershell - 通过 VBScript 和 PowerShell 使用 WMI 时的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883630/