2010-03-04 144 views
8

獲取第一條記錄我有一個簡單的VBScript檢索Windows版本:從WMI使用ExecQuery

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返回值是不正確的集合。

+0

我嘗試了各種方式獲得第一個值很長一段時間,但不能。這絕不是一個答案:) – Fionnuala 2010-03-04 11:18:10

回答

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

哇 - 即使在WinXP上也很容易和工作! – 2010-10-21 17:05:00

11

在Windows Vista和更高版本,可以使用ItemIndex方法,通過它的索引得到一個集合項目:

ver = colVersions.ItemIndex(0).Version 

在早期版本的Windows,有沒有辦法做到這一點我很害怕。

+0

這正是我所期待的。謝謝。 – 2010-03-04 13:31:29

+3

請小心 - 這在Windows XP中不起作用! – 2010-03-04 20:09:33

+0

@Lukas:確實,MSDN說'ItemIndex'是在Windows Vista中引入的。更新了答案。 – Helen 2010-03-06 14:28:20

-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循環的需要。

+0

雖然此代碼可能會回答問題,但爲何和/或代碼如何回答問題提供其他上下文可提高其長期價值。 – 2017-01-13 20:12:25

+0

這只是重複了海倫的回答(減去版本警告)。 – 2017-01-16 17:11:01

+0

同樣的結果,最終,但更清潔的國際海事組織。 – 2017-01-17 20:29:23