Получить первую запись из WMI ExecQuery - PullRequest
8 голосов
/ 04 марта 2010

У меня есть простой 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 ]

12 голосов
/ 21 октября 2010
For Each objVer in colVersions
   ver = objVer.Version
   exit for
Next
12 голосов
/ 04 марта 2010

В Windows Vista и более поздних версиях вы можете использовать метод ItemIndex для получения элемента коллекции по его индексу:

ver = colVersions.ItemIndex(0).Version

Боюсь, что в более ранних версиях Windows это сделать невозможно.

0 голосов
/ 13 января 2017
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.

...