zoukankan      html  css  js  c++  java
  • WQL语言初步

    一、WQL简介

    WQL就是WMI中的查询语言,WQL的全称是WMI Query Language,简称为WQL,翻译成中文好像可以成为Windows管理规范查询语言。

    WQL其实非常简单,它有如下特点:

    • 每个WQL语句必须以 SELECT 开始;
    • SELECT 后跟你需要查询的属性名(我刚才对应SQL将其称之为字段名了),也可以像SQL一样,以*表示返回所有属性值;
    • FROM关键字;
    • 你要查询的类的名字;
    • 另外,如果你想精确查询结果还可以加上WHERE条件从句。比如某个类有Enable属性,你可以在查询的时候加上WHERE ENABLE=true。

    二、详述

    1、语法

    • SELECT properties[,properties] FROM class [where clause]

    2、参数

    • SELECT 必选项。代表WQL语句的开始,
    • properties 必选项。代表想查询的属性名字。可以是多个属性名,也可查询所有属性值,用*代替。
    • FROM 必选项。跟在properties的后面。
    • Class 必选项。代表想要查询的类的名称。
    • where clause 可选项。where 从句和相关条件语句,用来缩小查询范围。

    3、逻辑运算

    • AND运算符,连接两个逻辑运算,当同时满足条件时通过。
    • OR运算符,连接两个逻辑运算,当至少一个满足条件时通过。

    例子:

    SELECT * FROM Win32_LogicalDisk WHERE (DriveType = 2) OR (DriveType = 3 AND FreeSpace < 1000000)

    4、比较运算

    • =                等于
    • >                大于
    • <                小于
    • <=             小于等于
    • >=            大于等于
    • <> 或 != 不等于
    • Is [not]       [不]是,仅仅用于比较NULL的时候

    例子:

    SELECT * FROM Win32_LogicalDisk WHERE FileSystem IS NULL

    SELECT * FROM Win32_LogicalDisk WHERE FileSystem IS NOT NULL

    SELECT * FROM Win32_LogicalDisk WHERE DriveType IS 5

    SELECT * FROM Win32_LogicalDisk WHERE FileSystem IS NOT "NTFS"

    5、Like运算符

    描述:模糊匹配查询的条件

    通配符

    • "%"代表一个或者多个字符。例如,%Office%可代表"My Offices," "Office VPN,"或"Office." Office%可代表"Offices"或"Office VPN,"但是不能代表"My Offices,"
    • "[ ]”返回参数范围.例如"[A-Z]ars"可代替"Mars," "Wars," and "Tars,"但是不鞥代替"Stars."
    • "^"取范围的反面。例如"[^A-M]ars"可代替"Wars"和"Tars,"但是不能代替"Mars"因为"M"不再指定范围内。
    • "_"代替单个字符。"M_rs"可代替"Mars," "M3rs,"

    6、判断运算

    描述:有的类的属性只有TRUE和FALSE两种状态,这个时候可以使用TRUE和FALSE来判断,记住这个时候不能使用is TRUE来判断,因为他只适用于判断NULL。

    例子:

    SELECT * FROM Win32_NetworkAdapterConfiguration WHERE DHCPEnabled = TRUE
    7、相关查询

    描述:检索与指定内容相关的所有实例并且返回查询结果。

    语法:ASSOCIATORS OF

    参数:

    ASSOCIATORS OF {描述}

    ASSOCIATORS OF {ObjectPath}

    说明:

    假设有四个实例,A,B,X和Y,其中A与X相关,B与Y相关

    执行ASSOCIATORS OF {A}仅仅会返回一个X,如果还有其他的关系,也许会返回两个或者以上的实例。

    例子:

    Query:

    ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"}

    Results:

    Win32_Directory.Name="C:\"
    Win32_ComputerSystem.Name="mycomputer"
    Win32_DiskPartition.DeviceID="Disk #0, Partition #0"

    如以下的都是正确的WQL语句:

    SELECT * FROM Win32_LogicalDisk where drivetype=3  

    SELECT * FROM Win32_share

    SELECT * FROM Win32_NetworkAdapterConfiguration WHERE DHCPEnabled=TRUE

    SELECT Description FROM Win32_Account WHERE Name='Administrator'

    SELECT Freespace,DeviceID FROM Win32_LogicalDisk

    三、例子

    使用 WQL 来创建有目标的查询,即做下列事情的查询:

    • 只返回托管资源所有实例的选定的属性。
      "SELECT DisplayName, State, StartMode FROM Win32_Service"
    • 返回一个类的选定的实例的所有属性。
      "SELECT * FROM Win32_Service WHERE State = 'Stopped'"
    • 返回一个类的选定实例的选定属性。
      "SELECT DisplayName,State,StartMode FROM Win32_Service WHERE State='Stopped'"

    创建有目标的查询有时会显著地提高数据返回的速度。

    例如,只返回那些在应用程序事件日志中含有 EventCode 0 的事件要比返回所有事件日志中的所有事件快的多。有目标的查询也让对返回的数据的工作变得更轻松。

    相反,InstancesOf 将返回所有事件,而且您将不得不单独地检查每个事件并确定它是否:1. 来自应用程序事件日志并且,2. 带有 EventCode 0。虽然这可以完成,但是这太低效了而且对您来说需要额外的工作。

    有目标的查询还可以减少返回的数据的数量,对在网络上运行的脚本来说这是个重要的考虑。表 1 展示了一些不同查询类型的相关数字。如您所见,通过各种查询类型返回的数据的数量是有相当大的差别的。

    方法/WQL 查询

    返回的字节

    objSWbemServices.InstancesOf("Win32_Service")

    157,398

    objSWbemServices.ExecQuery("SELECT * FROM Win32_Service")

    156,222

    objSWbemServices.ExecQuery("SELECT Name FROM Win32_Service")

    86,294

    objSWbemServices.ExecQuery("SELECT StartMode FROM Win32_Service")

    88,116

    objSWbemServices.ExecQuery("SELECT StartMode FROM Win32_Service WHERE State='Running'")

    52,546

    objSWbemServices.ExecQuery("SELECT StartMode, State FROM Win32_Service WHERE State='Running'")

    56,314

    objSWbemServices.ExecQuery("SELECT * FROM Win32_Service WHERE Name='WinMgmt'")

    27,852

    objSWbemServices.Get("Win32_Service.Name='WinMgmt'")

    14,860

  • 相关阅读:
    [机器学习]单变量线性回归(最小二乘法)
    [机器学习]kNN进邻算法
    Python笔记(读取txt文件中的数据)
    [机器学习笔记] 1监督学习
    LeetCode(Add Two Numbers)
    缓冲区溢出在Linux虚拟机上的实现过程中的问题与解决
    数据库与后端的映射
    电子公文传输系统 团队作业(五):冲刺总结
    电子公文传输系统 团队作业(五):冲刺总结(第一天)
    电子公文传输系统 团队作业(四):描述设计
  • 原文地址:https://www.cnblogs.com/cnsealine/p/3341431.html
Copyright © 2011-2022 走看看