gpt4 book ai didi

jscript - JScript枚举器和属性列表

转载 作者:行者123 更新时间:2023-12-04 13:18:11 25 4
gpt4 key购买 nike

请考虑以下WSH代码段:

var query = GetObject(“winmgmts:”)。ExecQuery(“SELECT Name 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 +“)”);
}

它在每行中打印一个打印机名称,并在方括号中打印单词“undefined”(因为Status对象中不存在p属性)。问题是:如何列出p的所有可用属性?使用for (var i in p) {...}的常用技术不起作用-似乎p对象中的属性不可枚举。

提前致谢。

最佳答案

JScript的for...in语句与WMI对象不兼容,因为它们比 native JScript对象更复杂。 WMI对象通过特殊的 Properties_ 属性公开其属性集合,因此要列出对象的所有可用属性,您需要枚举此集合,就像枚举查询结果以访问单个WMI对象一样。每个对象属性都由一个 SWbemProperty 对象表示,该对象具有NameValue和其他属性,这些属性提供有关适当的对象属性的信息。

这个例子应该可以帮助您理解:

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属性值,因为它是 Win32_Printer类的键属性,因此也将对其进行检索以唯一地标识类实例。

关于jscript - JScript枚举器和属性列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/973016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com