gri*_*yvp 3 vbscript powershell wmi
我有一个测试Windows XP SP3干净安装与电源外壳.如果我从PowerShell和VBScript访问WMI,这是一个非常奇怪的区别.来自powershell:
Get-WmiObject 'Win32_OperatingSystem" | select Caption
Run Code Online (Sandbox Code Playgroud)
这正确显示"Windows XP Professional".和编写为VBScript的代码相同:
WScript.Echo( GetObject( "winmgmts:Win32_OperatingSystem" ).Caption )
Run Code Online (Sandbox Code Playgroud)
显示"null"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
Run Code Online (Sandbox Code Playgroud)
虽然只有一个操作系统,但WMI查询始终返回一个列表.
好的,现在,差异 - 使用Get-WmiObjectcmdlet,因为只有一个操作系统,所以你直接得到对象而不是列表Get-WmiObject "Win32_OperatingSystem"(使用GetType来看这实际上是类型System.Management.ManagementObject)
由于会有多个进程,get-wmiobject win32_process会给出一个数组.(使用GetType查看此类型System.Object[]
以下内容不会给出任何结果:
(get-wmiobject win32_process).Caption
Run Code Online (Sandbox Code Playgroud)
以下是:
(get-wmiobject win32_process)[0].Caption
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1833 次 |
| 最近记录: |