[英]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.