[英]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
的可能值为0
或1
。
[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.