Я использую себя launchdarkly.com, чтобы сделать именно это. Это не бесплатно ($ 79 / месяц для первого плана), но поддерживает много вещей (сегментация пользователей, прогрессивное развертывание и т. Д.).
Оператор 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
, потому что оно '
Я думаю, проблема в вашем запросе, вы запрашиваете только Имя. Попробуйте запросить имя и статус:
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);
}