Перебрать все элементы коллекции

166
13 марта 2019, 15:50

Есть такой код на VBScript

Set WMIService = GetObject("winmgmts:\\localhost\root\cimv2")
Set WbemObjectSet = WMIService.ExecQuery("SELECT SID FROM Win32_Account Where SIDType=1", "WQL", 32)
For Each WbemObject in WbemObjectSet
  WScript.Echo(WbemObject.Name)
Next

Как его перенести на JScript?

Проблема с циклом For Each.

Если я пишу так

var WMIService = GetObject("winmgmts:\\\\localhost\\root\\cimv2")
var WbemObjectSet = WMIService.ExecQuery('SELECT SID FROM Win32_Account Where SIDType=1', 'WQL', 32);
for (var WbemObject in WbemObjectSet) {
  WScript.Echo(WbemObject.SID);
}

цикл не выполняется.

MSDN говорит, что у объекта WbemObjectSet есть свойство Count и методы Item, ItemIndex. Однако при обращении к ним я получаю ошибки

WScript.Echo(WbemObjectSet.Count);  // Неопознанная ошибка
WScript.Echo(WbemObjectSet.ItemIndex(0).SID);  // Invalid operation

Объект WbemObjectSet поддерживает интерфейс IEnumVariant с методом Next. Однако второй и третий параметр этого метода передаются по ссылке. Можно ли его вызвать из JScript?

Update

Предложенный в ответе метод работает только начиная с Windows Vista. Тогда как в Windows XP у объекта SWbemObjectSet нет метода ItemIndex(), а метод Item() в качестве аргумента принимает не индекс, а path-строку

Answer 1

Проблема решена. Я в метод WMIService.ExecQuery третьим параметром передавал флаг wbemFlagForwardOnly (32 (0x20)), что отключало навигацию по коллекции по произвольным индексам.

Если же передать флаг wbemFlagBidirectional (0 (0x0)) (или не передавать третий параметр вообще), то начинают работать Count и ItemIndex()

var WMIService = GetObject("winmgmts:\\\\localhost\\root\\cimv2");
var WbemObjectSet = WMIService.ExecQuery('SELECT SID FROM Win32_Account Where SIDType=1', 'WQL');
for (var i = 0; i < WbemObjectSet.Count; i++) {
  WScript.Echo(WbemObjectSet.ItemIndex(i).SID);
}
READ ALSO
Как правильно спарсить массив из JSON?

Как правильно спарсить массив из JSON?

Нужно вывести на сайт 10 последних транзакций на кошелёкЗначения берутся отсюда: https://api

284
Поворот на 180 градусов со сменой Div

Поворот на 180 градусов со сменой Div

Добрый день адепты программирования, начинающему верстальщику нужна ваша помощь!!!

177
Как работает анимация слоев в этой верстке? [закрыт]

Как работает анимация слоев в этой верстке? [закрыт]

Подскажите пожалуйста что движет этой анимацией слоев? В отладчике не какие значения не меняются + js не используетсяСледовательно вопрос...

173
Помогите получить id3 tag на js

Помогите получить id3 tag на js

На сайт необходимо сделать загрузку mp3 файлов, они автоматически должны записываться в базу по id3 тегам, желательно получать их в браузере...

124