WMI 查询某些计算机名称但不查询其他计算机名称

WMI 查询某些计算机名称但不查询其他计算机名称

我正在尝试编写一个 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 将不适用于它。

相关内容