WQL 子查询作为字段值,CIMV2 WMI WQL 查询用于 WMI-Filter

Posted

技术标签:

【中文标题】WQL 子查询作为字段值,CIMV2 WMI WQL 查询用于 WMI-Filter【英文标题】:WQL Subquery as field value, CIMV2 WMI WQL query for WMI-Filter 【发布时间】:2013-05-17 14:07:57 【问题描述】:

我需要有关组策略 WMI 过滤器的 WMI 查询的帮助。我正在查询 root\CIMV2 WMI 提供程序中的 win32_group 命名空间。

我正在几台 Windows 计算机(XP-8,服务器 03-12)上搜索本地安全组(如“管理员”)。当查询在计算机上运行时,我希望它将计算机名称注入域的等效字段。

基本 WQL 语句如下所示:

SELECT * FROM win32_group 
WHERE Domain="currentComputerName" and Name="Administrators"

我的目标是按照这些思路运行 WQL 语句,但这是一个糟糕的 WQL 语句:

SELECT * FROM win32_group 
WHERE Domain=(SELECT Name FROM Win32_ComputerSystem) and Name="Administrators" 

重要的是我能够为域注入当前计算机的名称。这些计算机是 Active Directory (AD) 域的一部分。默认情况下,win32_group 将搜索除本地计算机的安全组之外的所有 AD 域组(​​如果省略域参数)。通过将本地机器名称指定为域,查询的性能会大大提高——这对其目的至关重要。

我在 WBEMTEST 中尝试了一些查询变体,但没有成功。 有人对如何将计算机名称注入 WQL WMI 查询有任何想法吗? 是否有我可以使用的常量,例如命令提示符下的 HOSTNAME?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

你用什么语言写这个?或者说清楚,您使用什么编程或脚本语言来运行这些 WMI 查询?

在 PowerShell 中,您可以通过运行以下代码来做到这一点:

Get-WMIObject -Query "SELECT * FROM Win32_Group WHERE Domain='$env:USERDOMAIN' AND Name='Administrators'"

【讨论】:

以上是关于WQL 子查询作为字段值,CIMV2 WMI WQL 查询用于 WMI-Filter的主要内容,如果未能解决你的问题,请参考以下文章

WMI协议

SSIS常用的包—WMI数据读取任务和WMI事件监听任务

作为 Windows 服务托管时,远程 WMI 不起作用

WMI 访问被拒绝问题

如何在C#中获取给定服务的子进程列表?

通过 powershell 运行 WQL 查询