从WMI ExecQuery获取第一条记录

时间:2010-03-04 11:10:36

标签: windows vbscript wmi

我有一个简单的vbscript来检索Windows版本:

Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colVersions = objWMI.ExecQuery("Select * from Win32_OperatingSystem")

For Each objVer in colVersions
   ver = objVer.Version
Next

是否可以获取第一条记录,或者我是否必须遍历集合中的所有记录。我见过的所有例子都是For Each构造的。我尝试时收到预期声明结尾错误:

ver = colVersions[0].Version

看起来ExecQuery的返回值不是正确的集合。

3 个答案:

答案 0 :(得分:12)

在Windows Vista及更高版本中,您可以使用ItemIndex方法按索引获取集合项:

ver = colVersions.ItemIndex(0).Version

在早期的Windows版本中,恐怕无法做到这一点。

答案 1 :(得分:12)

For Each objVer in colVersions
   ver = objVer.Version
   exit for
Next

答案 2 :(得分:-1)

Set objWMI = GetObject("WinMgmts:{ImpersonationLevel=Impersonate}!\\.\Root\CIMV2")
Set objOS  = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem").ItemIndex(0)

msgBox objOS.Version

编辑说明: 通过将.ItemIndex(0)添加到原始查询中,您将获取集合中的第一个项目。这将消除对For / Each循环的需要。