首页 > 解决方案 > Powershell WQL 查询 (SCCM) 如何在两个 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”是一台 INACTIVE 计算机,我希望查询不返回它,因此它只返回 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

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

太感谢了! 在此处输入图像描述

标签: sqlpowershell

解决方案


的可能值为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 中更具限制性。


推荐阅读