WQLSet
WQLSet 元素描述了来自 Windows Management Instrumentation WQL 查询语句的结果集。通过 WQL,可以对多种不同的对象类进行类似于 SQL 的查询,查询结果将形成包含多行的表,其中每一行代表一个对象,每一列代表特定对象属性的值。
属性 | 描述 | 必需 | 缺省值 | 允许值 |
namespace | 设置 WMI 查询的命名空间。 | 是 | N/A | 代表有效 WMI 命名空间的字符串值。 "root\cimv2" 是查询 Windows 操作系统对象时最常用的命名空间,但也可使用其他命名空间,如 "root\directory\LDAP" 和 "root\Microsoft\SqlServer\ComputerManagement"。请参阅此处,了解枚举给定主机上可用 WMI 命名空间的小脚本(名为 GetNamespaces.vbs)。 |
wql | WQL 查询字符串。 | 是 | N/A | 一个有效的 WQL 字符串。 查询必须包含每个返回的对象的 __Path 属性;客户端在存储和报告结果时将 __Path 属性用作实体键,因此每个返回的 WMI 对象都必须包含 __Path。如果使用诸如 "SELECT * FROM ..." 的查询字符串,将提供 __Path 属性;但是,如果使用更具选择性的查询,如 "SELECT Name FROM ...",您必须通过将查询编写为 "SELECT __Path,Name FROM ..." 明确包含 __Path。 |
onChange | 是否应当实时监控返回的文件。 | 否 | false | true、false |
provider | 选择性指定要使用的备用 WMI 命名空间提供程序。 | 否 | 无 | RsopLoggingModeProvider 目前,只有组策略查询需要/支持此属性,且 "RsopLoggingModeProvider" 是唯一支持的值。组策略查询是特殊的查询,因为建议使用 RsopLoggingModeProvider 创建计算机上的策略数据的快照。如果创建策略数据的快照,则可以在系统刷新策略期间覆盖或删除一组一致性数据之前根据该数据执行查询。创建快照实际上创建了新的 WMI 命名空间,因此在 WQLSet 中使用 provider="RsopLoggingModeProvider" 时,namespace 属性应指定要添加到所创建命名空间的后缀。例如,由 RsopLoggingModeProvider 创建的典型的临时命名空间为 "\\.\Root\Rsop\NS71EF4AA3_FB96_465F_AC1C_DFCF9A3E9010"。指定 namespace="Computer" 以查询 "\\.\Root\Rsop\NS71EF4AA3_FB96_465F_AC1C_DFCF9A3E9010\Computer"。 由于临时命名空间是一次性值,因此在实体键中显示该值会阻碍客户端检测更改的功能。为避免此情况,客户端将在使用 RsopLoggingModeProvider 时移除 \Rsop\ 后到下一个反斜线之间的返回的 __Path 值部分。因此,实体键将具有如 "\\.\Root\Rsop\Computer" 的前缀,而不是 "\\.\Root\Rsop\NS71EF4AA3_FB96_465F_AC1C_DFCF9A3E9010\Computer" |
timeout | 指定每行超时(毫秒)。 | 否 | 5000 | 1-60000 WMI 查询在半同步模式下执行,每次获取一个结果行,且获取单个行时出现超时。如果未指定此参数,则将 5000(5 秒)用作超时值。 |
实体集属性
由 WQL 查询返回的每“行”均被视为用于进行完整性监控的单个实体,返回的列代表该实体的属性。鉴于 WMI/WQL 是开放型规范,因此不存在固定的可用或支持属性列表。查询和正在查询的 WMI 对象的架构将决定受监控的属性。
例如,WQLSet:
<WQLSet namespace="Computer" wql="select * from RSOP_SecuritySettings where precedence=1" provider="RsopLoggingModeProvider" />
将返回属性:
ErrorCode、GPOID、KeyName、SOMID、Setting、Status、id、precedence
然而查询网络适配器的如下 WQLSet:
<WQLSet namespace="root\cimv2" wql="select * from Win32_NetworkAdapter where AdapterTypeId = 0" />
将返回如下属性:
AdapterType、AdapterTypeId、Availability、Caption、ConfigManagerErrorCode、ConfigManagerUserConfig、CreationClassName Description、DeviceID、Index、Installed、MACAddress、Manufacturer、MaxNumberControlled、Name、PNPDeviceID、PowerManagementSupported、ProductName、ServiceName、SystemCreationClassName、SystemName、TimeOfLastReset
为了减少客户端上的负载,建议仅明确包含需要监控的属性,而不是在查询中使用 "select * ..."。这样做的另一个好处是:除非属性是正在监控的集的一部分,否则对 WMI 架构所做的添加或移除属性的更改将不报告为对象更改。使用 "select * from Win32_Foobar",将新属性添加到 Win32_Foobar 对象类的 Windows 的 Patch 将导致下一次完整性扫描报告该类的每个对象均发生更改(因为出现了新属性)。
下面是返回需要的 Windows 系统实体的一些示例 WMI 查询。
Windows 挂载的存储设备的查询:(选择 * 通常会导致 80% 返回的属性为空或为重复值)
<WQLSet namespace="root\cimv2" wql="SELECT __Path,DeviceID,VolumeName,VolumeSerialNumber,DriveType,FileSystem,Access,MediaType,Size,FreeSpace FROM Win32_LogicalDisk" />
要进一步执行上述查询,可指定 DriveType 以仅找出某些类型的已挂载逻辑存储设备,例如为“可移动磁盘”的类型 2:(类似于可移动 USB 存储设备)
<WQLSet namespace="root\cimv2" wql="SELECT __Path,DeviceID,VolumeName,VolumeSerialNumber,DriveType,FileSystem,Access,MediaType,Size,FreeSpace FROM Win32_LogicalDisk WHERE DriveType=2" />
(有关 Win32_LogicalDisk 类的详细信息,请参阅此处)
USB 存储设备注释:U3 USB 设备将挂载类型 2“可移动磁盘”设备和类型 3“光盘”设备。此外,以上查询仅适用于存储设备。将不包含 USB 非存储设备。USB 内存卡适配器可能显示为类型 1“无根目录”设备。无效的或 Windows 不兼容的 USB 存储设备可能显示为类型 1“未知”设备。
查询驱动器为 "F:" 的所有已知系统目录的相关属性:
<WQLSet namespace="root\cimv2" wql="SELECT __Path,CreationDate,LastAccessed,LastModified,Drive,Path,FileName,Caption,FileType,Readable,Writeable FROM Win32_Directory WHERE Drive='F:'" />
查询驱动器为 "F:" 的所有已知系统文件的相关属性:
<WQLSet namespace="root\cimv2" wql="SELECT __Path,CreationDate,LastAccessed,LastModified,Drive,Path,FileName,Name,FileType,Readable,Writeable FROM CIM_DataFile WHERE Drive='F:'" />
Key 的含义
Key 为返回的 WMI 对象的 "__Path" 属性,其一般形式为:
SystemName\Namespace:WmiObjectClass.KeyAttribute=Value[,KeyAttribute=Value...]
一些示例:
\\TEST-DESK\root\cimv2:Win32_QuickFixEngineering.HotFixID="KB958215-IE7",ServicePackInEffect="SP0"
\\TEST-DESK\ROOT\Rsop\NSF49B36AD_10A3_4F20_9541_B4C471907CE7\Computer:RSOP_RegistryValue.
Path="MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\LegalNoticeText",precedence=1
\\TEST-DESK\root\cimv2:BRCM_NetworkAdapter.DeviceID="8"
Include 和 Exclude
有关 "include" 和 "exclude" 的允许属性和子元素的一般说明,请参阅完整性监控规则语言。
对于 WQLSet,通常应不需要 "include" 和 "exclude" 子元素。建议使用 WQL 指定要监控的确切对象集,因为这样可限制由客户端和主机的 WMI 操作执行的工作量。
使用任意包含或排除子元素只能减少由查询返回的对象集;要返回其他对象,必须更改 WQL。如果需要使用包含或排除元素进一步限制 WQL 结果,可以使用 "*" 和 "?" 字符作为简单通配符来匹配实体键的值。