WMI中的SQL,WQL简明教程系列1:关键字

mitchellchu:wmi wql教程  WMI(, Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。WMI 通过编程和脚本语言为日常管理提供了一条连续一致的途径。而要在编程或者脚本语言中使用WMI,那自然不可或缺的就是WMI的查询语言(WQL,WMI Query Language),WQL是在美国国家标准研究所结构查询语言(ANSI SQL)的一个子集,并在此基础上作出稍许语义变化。WQL非常类似与通常使用的SQL语句,却没有SQL语句那么的复杂多变,算起来也可以说只是SQL语句的一个小子集。

  要了解和使用,WQL中使用的关键字是不可或缺的一环,像下面这些语句,你了解多少呢?

SELECT * FROM Win32_NetworkAdapterConfiguration
WHERE IPEnabled = True

SELECT * FROM Meta_Class
WHERE __Class LIKE "%Win32%"

ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"}
WHERE RequiredQualifier = Locale

看不懂? 没关系,本文就是本着看懂WQL语句的目的而来的。下面这个表格就是WQL会用到的,而且后面还有对关键字的解释,相信你在看完MitchellChu整理翻译的这张表之后,上面这些语句应该不在话下了——至少知道他们大概是干什么的了。

WQL 关键字 关键字解释
AND

连接两个布尔表达式,当两个布尔表达式都为TRUE时返回TRUE,否则返回FALSE,这个和SQL语句中的WHERE子句中的AND类似。

示例:查询Index为1并且IPEnabled为TRUE的网卡

SELECT * FROM Win32_NetworkAdapterConfiguration
WHERE Index=1 AND IPEnabled=TRUE
      
ASSOCIATORS OF

获取所有与特定源实例关联的终结点实例集合。在架构查询和数据查询中使用此语句。

示例:查询所有和逻辑盘符为C:的,并且ResultRole为GroupComponent的实例

ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"}
WHERE ResultRole = GroupComponent
      
__CLASS

在查询结果集中对象继承的类对象引用。

示例:查询所有class派生于Win32_LogicalDisk的类实例,如果没有WHERE子句,则返回的是所有派生于Win32_LogicalDisk或者class直接为 Win32_LogicalDisk的对象集合

SELECT * FROM Win32_LogicalDisk
WHERE __CLASS="Win32_LogicalDisk"
        
Windows NT 4.0 and Windows Me/98/95:不可用
FROM 指定SELECT语句中所有结果集的来源类。Windows Management Instrumentation(WMI)一次仅支持从一个类中查询数据。
GROUP Clause

引起WMI产生一个通知来代表一组事件,

HAVING 过滤在指定WITHIN子句分组中接收到的事件。这个是配合GROUP子句使用的。
IS 和 NOT还有NULL配合使用的比较运算符,更多可以参加WQL 运算符。使用语法如下:

IS [NOT] NULL

( NOT为可选)

ISA

运算符指定查询中子类为某个特定的class,针对Event查询,Data查询,Schema 查询,可以参见(英文):ISA Operator for Event Queries,ISA Operator for Data Queries, ISA Operator for Schema Queries.

示例:

SELECT * FROM __InstanceModificationEvent WITHIN 600
WHERE TargetInstance ISA "Win32_LogicalDisk"
KEYSONLY

在REFERENCES OF和ASSOCIATORS OF 查询中用来确认返回的结果实例集中只有关键的实例/属性被填充。以此来降低查询的调用成本。

示例:

ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"}
WHERE KEYSONLY
Windows 2000, Windows NT 4.0, and Windows Me/98/95: 不可用.
LIKE

用来确定给定的字符串是否匹配指定模式的运算符。使用类似于SQL语句中的LIKE。

示例:

SELECT * FROM meta_class
WHERE __CLASS LIKE "%[_][_]%"
NOT

在WQL SELECT查询中使用的比较运算符:

示例:

SELECT * FROM meta_class
WHERE NOT __class < "Win32" AND NOT __this ISA "Win32_Account"
NULL 表明一个对象没有明确的指定值,NULL 不等于零(0) 或空
OR 合并两个条件结果的逻辑运算符。当在语句中使用了多个逻辑运算符是,OR运算符优先级在AND运算符之后。
REFERENCES OF 获取所有引用特定源实例的关联实例集,一般在schema和data查询中使用,REFERENCES OF语句与ASSOCIATORS OF 语句类似,。但需要注意的是REFERENCES OF并不会获取中介点的实例(endpoint instances),而仅是获取关联实例集。
SELECT 指定在查询中需要使用的属性集。更多信息可以参见data查询,Event 查询,Schema查询,具体连接为(英文):SELECT Statement for Data Queries, SELECT Statement for Event Queries, SELECT Statement for Schema Queries.
TRUE 布尔运算符,其结果为:-1 (minus one).
WHERE 缩小data,event,schama查询的范围
WITHIN 指定轮询的间隔或者分组区间,一般在event查询中使用此子句。
FALSE 布尔运算符, 其值为:0 (zero).

  看完上面这个表之后,有没有发现WQL其实和SQL非常的相像?除了一些像REFERENCES OF这样特别些的语法,其他和SQL真的差不多,难怪乎会说WQL是SQL的一个子集。接下来,我们可以在看看WQL的运算符,因为要组成一个完整的WQL语句,与关键字还不行,还得有运算符。

  准备好了么?让我们去看看WQL的运算符了——WMI中的SQL,WQL简明教程系列2:运算符

 

附注:

本文的关键字列表翻译自微软官网:WQL (SQL for WMI)

Saturday, June 15, 2013 | .NET技术 其他技术 编程语言

文章评论

  • # re: WMI中的SQL,WQL简明教程系列1:关键字
    • a11
    • 4/3/2015 12:03 PM
    aaaaaaaaaaaa

发表评论

Please add 2 and 1 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。