如何在SCCM的PowerShell WQL查询中添加双重WHERE过滤条件?
在SCCM的WQL查询中添加多个WHERE过滤条件
嘿,作为SCCM PowerShell WQL新手,你已经迈出了超棒的第一步!要给你的查询加多个过滤条件其实很简单——WQL和SQL逻辑一致,用AND或者OR就能轻松连接多个条件,选哪个取决于你是要同时满足所有条件(用AND)还是满足任意一个条件(用OR)。
先简化你原有的代码
首先,你给输入主机名前后加%的写法可以简化成一行,不用分开调用Insert和+=,更简洁:
[string]$poste_entre = "%$(Read-Host "Poste")%"
添加多个过滤条件的实战示例
下面给你举两个常见的场景示例,你可以根据自己的实际需求替换条件字段:
示例1:同时满足「主机名模糊匹配」+「已安装SCCM客户端」
如果你只想筛选出匹配主机名且已经装了SCCM客户端的设备,就用AND连接两个条件:
# 获取用户输入并自动添加模糊匹配通配符 [string]$poste_entre = "%$(Read-Host "Poste")%" # 构造包含双条件的WQL查询 [string]$wqlQuery = @" SELECT SMS_R_System.Name FROM SMS_R_System WHERE SMS_R_System.Name LIKE '$poste_entre' AND SMS_R_System.Client = 1 "@ # 执行SCCM查询并提取结果 [string[]]$postes = (Get-WmiObject -ComputerName SSigcimpr001 -Namespace "root\sms\site_pr1" -Query $wqlQuery).Name # 输出最终结果 $postes
示例2:满足「主机名模糊匹配」OR「操作系统是Windows 10」
如果你想筛选出主机名匹配或者操作系统是Windows 10的设备,就把AND换成OR:
[string]$poste_entre = "%$(Read-Host "Poste")%" [string]$wqlQuery = @" SELECT SMS_R_System.Name FROM SMS_R_System WHERE SMS_R_System.Name LIKE '$poste_entre' OR SMS_R_System.OperatingSystemNameandVersion LIKE '%Windows 10%' "@ [string[]]$postes = (Get-WmiObject -ComputerName SSigcimpr001 -Namespace "root\sms\site_pr1" -Query $wqlQuery).Name $postes
实用小提示
- 要确认你用的字段名是正确的,想查看
SMS_R_System类的所有可用属性,在PowerShell里执行这条命令就行:Get-WmiObject -Namespace "root\sms\site_pr1" -Class SMS_R_System | Get-Member -MemberType Property - 如果需要三个或更多条件,继续用
AND/OR连接即可,比如:WHERE 条件1 AND 条件2 AND 条件3
内容的提问来源于stack exchange,提问作者Rakha
相关产品推荐
相关产品推荐

