powershell - 通过 VBScript 和 PowerShell 使用 WMI 时的区别

标签 powershell vbscript wmi

我有一个带有 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/

相关文章:

Azure KeyVault : How to set access policy in parallel

windows - 为什么 "Set-Item"在 Windows 7 PowerShell 上不起作用?

delphi - 数组的 WMI 值

c# - WMI 和 C# 可以一起玩吗?

powershell - Win32_processor仅显示CPU0

c# - 如何正确设置执行子 powershell 脚本的路径?

PowerShell:读取 PowerShell 脚本日志

variables - 声明变量内存泄漏

c# - 重命名文件Powershell看不到

c++ - VB脚本与COM接口(interface)继承相关的查询