通过 powershell 运行 WQL 查询

Posted

技术标签:

【中文标题】通过 powershell 运行 WQL 查询【英文标题】:Run WQL query by powershell 【发布时间】:2015-07-09 07:29:30 【问题描述】:

我想知道如何使用 powershell 运行 WQL 查询。 这是 WQL 查询

Select UAR.User, UAR.Application, UAR.CurrentState from sms_fullcollectionmembership as FCM
INNER JOIN SMS_UserApplicationRequest as UAR ON UAR.User=FCM.SMSID
where FCM.CollectionID="100104"

【问题讨论】:

【参考方案1】:

about_WQL 帮助文件中所述,您可以使用以下 2 个 cmdlet 之一:Get-WmiObjectGet-CimInstance,也可以使用 [wmisearcher] 类型的加速器:

使用Get-WmiObject:

 $queryNameVersion = "Select Name, Version from Win32_Bios"
 Get-WmiObject -Query $queryNameVersion

使用Get-CimInstance:

 $queryNameVersion = "Select Name, Version from Win32_Bios"
 Get-CimInstance -Query $queryNameVersion

使用[wmisearcher]:

 $searcher = [wmisearcher]"Select Name, Version from Win32_Bios"
 $searcher.Get()

Get-WmiObject 旨在与 WMI(Microsoft 自己的 CIMv2 服务器实现)一起使用,而 Get-CimInstance 应该与任何符合 CIMv2 的服务器一起使用(尽管 AFAIK,WQL 是特定于 WMI)。


在您的示例中,您可以将查询放入 here-string 以保持可读性:

$SCCMQuery = @'
Select UAR.User, UAR.Application, UAR.CurrentState from sms_fullcollectionmembership as FCM
INNER JOIN SMS_UserApplicationRequest as UAR ON UAR.User=FCM.SMSID
where FCM.CollectionID="100104"
'@
$Results = Get-WmiObject -Namespace "root\SMS\Site_Name" -Query $SCCMQuery

【讨论】:

你能看看这个问题***.com/questions/31324415/…【参考方案2】:

就这么简单:

Get-WmiObject -query $wqlQuery

标准别名是gwmi

如果超出默认 WMI 名称空间,则提供 -namespace 参数。

(也有Get-CimInstance -query …,但我不熟悉。)

【讨论】:

两者都应该工作,Get-CIMInstanceGet-WMIObject 的工作等等,所以它对 WMI 查询也有同样的作用。

以上是关于通过 powershell 运行 WQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

软件清单的 WQL 查询

win7怎样运行powershell脚本

MSSQL/WMI/PowerShell结合篇SQL Server镜像状态变化实时告警

如何通过cmd杀死powershell进程?统一远程应用

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

PowerShell初探