Получить первую запись из WMI ExecQuery

у меня есть простой vbscript для получения версии Windows:

Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!.rootcimv2")
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 ответов


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

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

ver = colVersions.ItemIndex(0).Version

в более ранних версиях Windows, нет никакого способа сделать это, я боюсь.


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.