aardio 文档
aardio 范例: WMI 查询入门
com.wmi 库文档
//WMI 查询入门
//com.wmi 库文档: https://www.aardio.com/zh-cn/doc/library-reference/com/wmi.html
import com.wmi;
/*
com.wmi 库查询类函数 WQL 参数规则:
- 所有 wql 参数可指定 WQL 语句也可以指定单个 WMI 类名,
指定单个 WMI 类名时可省略 "Win32_" 前缀或使用 wmic 兼容的别名。
如果不是仅省略 "Win32_" 前缀的别名由 com.wmi._alias 表对象记录(键名必须小写) 。
查询参数中 WQL 或 WMI 类名忽略大小写区别,非单个 WMI 类名的 WQL 语句内不能使用别名。
- com.wmi 库由第一个参数指定 WQL 参数的函数,
如果第二个参数是一个表对象,则支持参数化 WQL 语句。
WQL 语句中 `@` 开头的命名参数由参数表中的名值对指定值,
而WQL 语句中 `?` 表示的匿名参数则由参数表中的数组成员指定值。
*/
/*
WMI 的原始查询结果是包含多个 COM 对象的数组,
而 com.wmi.get 会返回这个查询结果数组中的首个元素,
如果在参数 @2 中指定了一个属性名(只含字母数字或下划线)则会直接返回对应的属性值。
下面的示例获取操作系统版本名称,作用类似执行命令 wmic os get caption
*/
var osCaption = com.wmi.get("os","caption");
//也可以仅省略 Win32_ 前缀
var osCaption = com.wmi.get("OperatingSystem","Caption");
//也可以写完整类名
var osCaption = com.wmi.get("Win32_OperatingSystem","Caption");
// com.wmi.get 第二个参数指定属性时,返回 CIM DATETIME 字符串自动转为 time 对象
var installDate = com.wmi.get("os","installDate");//取当前操作系统安装时间
//这样返回的是 COM 对象
var wmiOperatingSystem = com.wmi.get("Win32_OperatingSystem");
//也可以写完整的 WQL 语句,效果是一样的
var wmiOperatingSystem = com.wmi.get("SELECT * FROM Win32_OperatingSystem");
//这样通过 WMI 对象( COM 对象)读取属性值
print(wmiOperatingSystem.Caption)
//这样返回的是包含了 WMI 对象所有属性的普通表对象
//属性表中只保存 WMI 对象的属性值,不再拥有 WMI 对象的方法。
var osProperties = com.wmi.getProperties("SELECT * FROM Win32_OperatingSystem");
//获取表的属性
print(osProperties.Caption) //要注意 WMI 属性名首字母大写,属性表不再是 WMI 对象,因此是大小写敏感的。
//仅 SELECT 需要的字段 Caption
var osProperties = com.wmi.getProperties("SELECT Caption FROM Win32_OperatingSystem");
//返回的表结构还是一样的,表中只有 SELECT 筛选的字段。
print(osProperties.Caption)
//com.wmi.query 返回包含所有查询结果的 COM 集合对象
var wmiResults = com.wmi.query("SELECT * FROM Win32_OperatingSystem")
//用 com.each 遍历 COM 对象,当然操作系统只能有一个,所以这个集合里只有一个元素
for index,wmiObject in com.each(wmiResults) {
print(index,wmiObject.Caption)
}
/*
com.wmi.getTable 也是返回包含所有查询结果的数组,
但已经转换为了普通的属性表数组,返回值不再是 COM 对象。
相当于数组中的每个元素都是用 com.wmi.getProperties 转换得到的属性表。
属性表中只保存 WMI 对象的属性值,不再拥有 WMI 对象的方法。
*/
var results = com.wmi.getTable("SELECT * FROM Win32_OperatingSystem")
//普通表可以直接遍历,不需要用 com.each 。
for(i,props in results){
print(i,props.Caption)
}
//查询并遍历查询结果中的 WMI 对象(COM 对象)
for i,wmiObject in com.wmi.each("SELECT * FROM Win32_OperatingSystem") {
print(i,wmiObject.Caption)
}
//查询并遍历由所有查询结果转换而来的属性表
for props,i in com.wmi.eachProperties("SELECT * FROM Win32_OperatingSystem") {
print(i,props.Caption)
}
//所有 WQL 参数都可以直接用 WMI 类名,,支持别名
for props,i in com.wmi.eachProperties("os") {
print(i,props.Caption)
}
//WQL 参数化查询
var props = com.wmi.getProperties(
"SELECT * FROM Win32_UserAccount WHERE Status=@status",
{ status="OK"}
)
print( props.Name )
Markdown 格式