我正在尝试创建一个 WMI 过滤器来选择所有工作站和 RDS 服务器
我目前正在使用
SELECT * FROM Win32_OperatingSystem WHERE (ProductType = "1") OR (CSName = "288-RDS01") OR (CSName = "288-RDS02")
但是如果 RDS 服务器名称发生变化,则此方法不起作用。
理想情况下,我希望运行更接近
SELECT * FROM Win32_OperatingSystem WHERE (ProductType = "1"); SELECT * FROM Win32_ServerFeature WHERE ID = 18
根据我的研究,如果我对过滤器应用了 2 个查询,则两个查询都必须返回 true,过滤器才会返回 true。
这是可能的吗?或者第一个查询就是我能得到的最好的结果?
我最终选择了
SELECT * FROM Win32_OperatingSystem WHERE (ProductType = "1") OR (CSName LIKE "288-RDS%")
但如果有人有改进或其他方法,我很想知道。
答案1
似乎你有一个命名约定,所以也许你可以做这样的事情:
SELECT * FROM Win32_ComputerSystem WHERE (Name LIKE '%-RDS%') OR (Name LIKE '%whatever%')
答案2
以下 WMI 查询应该可以工作 - 在 Win32_OperatingSystem 下有一个 OSProductSuite 值,您可以使用它来检测终端服务,这是远程桌面服务器的旧名称。
我找不到在 WQL 中执行按位运算的方法,因此根据您的环境,您可能需要终端服务(16),或在 Windows Server Enterprise Edition 上运行的终端服务(16+2 = 18),或在 Windows Server Datacenter Edition 上运行的终端服务(128+2 = 144),以及可能的其他组合 - 但它确实有效。
最后的 ProductType = 1 涵盖工作站。
SELECT OSProductSuite, ProductType FROM Win32_OperatingSystem WHERE OSProductSuite = "16" OR OSProductSuite = "18" OR OSProductSuite = "144" OR ProductType = "1"
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-operatingsystem