Powershell WQL查询(SCCM)如何过滤两个WHERE?

时间:2018-05-03 17:37:24

标签: sql powershell

对于SCCM通过Powershell的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”是一台非活动计算机,我希望查询不要返回它,因此它只返回ACTIVE计算机。

我以为我可以像这样进行查询:

[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

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

非常感谢你! enter image description here

2 个答案:

答案 0 :(得分:1)

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 queries。语法类似于SQL,但语法中的细微差别在WQL中更具限制性。

答案 1 :(得分:0)

在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