我正在尝试编写一个 GPO WMI 查询,该查询将包括具有特定名称的计算机,但排除符合这些参数的某些计算机。这是我所拥有的(但不起作用):
SELECT * FROM Win32_ComputerSystem WHERE Name LIKE '%MSD%' OR Name LIKE '%MSL%' AND NOT Name LIKE "%MSDSY%"
此选项不起作用。我还尝试将其分成两个不同的查询,如下所示:
SELECT * FROM Win32_ComputerSystem WHERE Name LIKE '%MSD%' OR Name LIKE '%MSL%'
进而:
SELECT * from Win32_ComputerSystem WHERE NOT Name LIKE "%MSDSY01% OR %MSDSY02% OR %MSDSY05%"
那也没用。有人能告诉我我做错了什么吗?谢谢。
答案1
我还没有测试上一个答案中的括号,如果它有效的话应该可以解决问题。
我认为你把事情搞得太复杂了,其实可以简化。首先,如果你的服务器名称总是以 MS 开头,那么就删除开头的百分号。接下来,把它想象成匹配所有你想要的,然后排除那些你不需要的。
您希望所有以 MS 开头的服务器
SELECT * FROM Win32_ComputerSystem WHERE Name LIKE 'MS%'
您不想要任何以 MSDS(或 MSDSY,但在您的示例中,您可以在第二个 S 处停止)开头的服务器
SELECT * FROM Win32_ComputerSystem WHERE not Name LIKE 'MSDS%'
现在把它们结合起来
SELECT * FROM Win32_ComputerSystem WHERE Name LIKE 'MS%' AND NOT Name LIKE 'MSDS%'
这将获取以 MS 开头的所有服务器,但以 MSDS 开头的服务器除外。
我也鼓励你使用WBEMTEST 实用程序,它可以帮助您微调这些查询(和/或确保您的答案在堆栈交换上是准确的!)
答案2
我已经有一年多没有在 GPMC 中构建 WMI 查询了,但我认为只要添加一些括号,你的第二个查询就会起作用:
从 Win32_ComputerSystem 中选择 *,其中(名称类似于“%MSD%”或名称类似于“%MSL%”)
括号中的内容仅对这两个通配符匹配才应返回 true。如果计算机名称是其他任何名称,则查询将返回 false,并且 GPO 将不适用于它。