繁体   English   中英

Powershell WQL查询(SCCM)如何在两个WHERE上进行过滤?

[英]Powershell WQL query (SCCM) how do you filter on two WHERE?

通过Powershell从SCCM进行WQL查询真的很新,到目前为止,我已经做到了:

[string]$poste_entre = Read-Host "Poste"
[string]$poste_entre = $poste_entre.Insert(0,"%")
[string]$poste_entre += "%"
""


[string[]]$postes=(Get-WmiObject -ComputerName SSigcimpr001 -Namespace "root\sms\site_pr1" -Query ("select SMS_R_System.Name from  SMS_R_System WHERE SMS_R_System.Name like '" + $poste_entre + "' ")).Name


$postes

在这种情况下,我输入部分名称(0293),并在字符串(通配符)的开头和结尾添加%,查询返回我正在正确搜索的两台计算机:

Poste: 0293

A0293
P0293

但是,计算机“ A0293”是不活动的计算机,我希望查询不返回它,因此它仅返回活动的计算机。

我以为我可以这样查询:

[string[]]$postes=(Get-WmiObject -ComputerName SSigcimpr001 -Namespace "root\sms\site_pr1" -Query ("select SMS_R_System.Name from  SMS_R_System WHERE SMS_R_System.Name like '" + $poste_entre + "' AND SMS_R_System.Active = '1' ")).Name

但是它不起作用,它仍然返回两台计算机,但是其中一台显然是不活动的? 为什么查询不只返回活动计算机?

非常感谢! 在此处输入图片说明

SMS_R_System.Active的可能值为01

[string[]]$postes=(Get-WmiObject -ComputerName SSigcimpr001 -Namespace "root\\sms\\site_pr1" -Query ("select SMS_R_System.Name from SMS_R_System WHERE SMS_R_System.Name like '" + $poste_entre + "' AND SMS_R_System.Active = 1")).Name

顺便说一下,从技术上讲,这些是WQL查询 语法与SQL相似,但是语法上有细微的差别,这在WQL中受到更多限制。

最终在langstrom的帮助下找到了答案,最终的查询是这样的:

[string[]]$postes=(Get-WmiObject -ComputerName SSigcimpr001 -Namespace "root\sms\site_pr1" -Query ("select SMS_R_System.Name from  SMS_R_System  inner join SMS_G_System_CH_ClientSummary on SMS_G_System_CH_ClientSummary.ResourceId = SMS_R_System.ResourceId where SMS_G_System_CH_ClientSummary.ClientActiveStatus = 1 AND SMS_R_System.Name like '" + $poste_entre + "' ")).Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM