对于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
但它不起作用,它仍然会返回两台计算机,但其中一台显然不活动?为什么查询不返回活动计算机?
答案 0 :(得分:1)
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 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