【问题标题】:Difference while working with WMI via VBScript and PowerShell通过 VBScript 和 PowerShell 使用 WMI 时的区别
【发布时间】:2011-07-30 14:06:41
【问题描述】:

我使用 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。为什么会这样?

【问题讨论】:

    标签: powershell vbscript wmi


    【解决方案1】:

    这是等效的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2010-11-25
      • 2011-04-21
      • 2010-10-09
      相关资源
      最近更新 更多