Перечислитель JScript и список свойств

Я использую себя launchdarkly.com, чтобы сделать именно это. Это не бесплатно ($ 79 / месяц для первого плана), но поддерживает много вещей (сегментация пользователей, прогрессивное развертывание и т. Д.).

6
задан Putnik 16 January 2014 в 19:58
поделиться

2 ответа

Оператор JScript for ... in несовместим с объектами WMI, потому что, ну, они сложнее, чем собственные объекты JScript. Объекты WMI предоставляют свою коллекцию свойств через специальное свойство Properties_ , поэтому для перечисления всех доступных свойств объекта вам необходимо перечислить эту коллекцию, как вы перечисляете результаты запроса для доступа к отдельным объектам WMI. Каждое свойство объекта представлено объектом SWbemProperty , имеющим Имя , Значение и другие свойства, предоставляющие информацию о соответствующем свойстве объекта.

Этот пример должен поможет вам понять идею:

var query = GetObject("winmgmts:").ExecQuery("SELECT Name, Status FROM Win32_Printer");
var colPrinters = new Enumerator(query);

var oPrinter, colProps, p;

// Enumerate WMI objects
for ( ; !colPrinters.atEnd(); colPrinters.moveNext()) { 
    oPrinter = colPrinters.item();

    // Enumerate WMI object properties
    colProps = new Enumerator(oPrinter.Properties_);
    for ( ; !colProps.atEnd(); colProps.moveNext()) { 
        p = colProps.item();
        WScript.Echo(p.Name + ": " + p.Value);
    }
}

Обратите внимание, что этот скрипт также отобразит значение свойства DeviceID , потому что оно '

10
ответ дан 8 December 2019 в 13:48
поделиться

Я думаю, проблема в вашем запросе, вы запрашиваете только Имя. Попробуйте запросить имя и статус:

var query = GetObject("winmgmts:").ExecQuery("SELECT Name, Status  FROM Win32_Printer", "WQL", 0);
var e = new Enumerator(query);
for ( ; !e.atEnd(); e.moveNext ()) { 
    var p = e.item();
    WScript.Echo(p.Name + " (" + p.Status + ")" );
}

Я получил еще несколько свойств из http://msdn.microsoft.com/en-us/library/aa394363 (VS.85) .aspx и несколько работ . Я запросил DriverName и Comment, и у обоих был текст или хотя бы ноль.

var query = GetObject("winmgmts:").ExecQuery("SELECT Name, Status, DriverName, Comment  FROM Win32_Printer", "WQL", 0);
var e = new Enumerator(query);
for ( ; !e.atEnd(); e.moveNext ()) { 
    var p = e.item();
    WScript.Echo(p.Name + " (" + p.Status + ") " + p.DriverName + " " + p.Comment);
}
1
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: