Как в VBScript получить первый элемент коллекции InstancesOf? - PullRequest
3 голосов
/ 16 июня 2020

Я пишу сценарий VBScript, который должен идентифицировать детали ОС. Я нашел здесь пример с использованием системы InstancesOf Win32_Operating, но вместо foreach l oop из образца я хочу обратиться только к первому возникновению, поэтому я сделал:

Set SystemSet = GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
Set System = SystemSet.Item(0)

Также попробовал Set System = SystemSet(0) , но каждый раз, когда у меня появляется типовое сообщение об ошибке c (Eche c générique на французском).

Как я могу этого добиться, чтобы затем сравнить строку System.Caption?

1 Ответ

3 голосов
/ 16 июня 2020

GetObject("winmgmts:") возвращает объект SWbemServices. Согласно документации для объекта SWbemServices метод InstanceOf():

From SWbemServices.InstancesOf метод создает перечислитель, который возвращает экземпляры указанного класса в соответствии с указанными пользователем критериями выбора. *For Each оператор для перебора перечислителя.

Простой пример:

Dim swbemInstances, swbemInstance
Set swbemInstances = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
For Each swbemInstance In swbemInstances
  WScript.Echo swbemInstance.Caption
Next

Вы можете получить доступ к экземпляру непосредственно из перечислителя, используя метод ItemIndex который, как говорится в документации;

From SWbemObjectSet.ItemIndex method возвращает SWbemObject, связанный с указанным индексом в коллекцию. Индекс указывает положение элемента в коллекции. Нумерация коллекций начинается с нуля.

Примечание: Интересный момент: в документации фактически приводится класс Win32_OperatingSystem в качестве примера, где вы, вероятно, хотите получить только один экземпляр, и объясняется, как использовать ItemIndex для его облегчения.

Из SWbemObjectSet.ItemIndex Метод - Примеры Для каждой установки операционной системы существует только один экземпляр Win32_OperatingSystem . Создание пути GetObject для получения единственного экземпляра неудобно, поэтому сценарии обычно перечисляют Win32_OperatingSystem , даже если доступен только один экземпляр. В следующем примере кода VBScript показано, как использовать метод ItemIndex для доступа к одной Win32_OperatingSystem без использования For Each l oop.

*. 1060 *

Что-то вроде;

Dim swbemInstance
Set swbemInstance = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem").ItemIndex(0)
WScript.Echo swbemInstance.Caption

Также упоминается в комментариях

...