У меня три машины: ASAAD-0 MSN-LEED01 MSN-LEED02
В групповой политике у меня есть фильтр WMI под названием LEED, который выглядит следующим образом:
SELECT * FROM Win32_ComputerSystem WHERE (Name != "MSN-LEED01" OR Name != "MSN-LEED02")
Подразделение, содержащее объект групповой политики с этим фильтром, применяется ко всем трем машинам.
На ASAAD-0, когда я запускаю gpresult / h, я вижу, что этот фильтр оценивается как True, чего и следовало ожидать. Однако на обеих машинах LEED он по-прежнему оценивается как True, хотя кажется, что он должен оцениваться как False.
Я пробовал несколько разных способов проверить правильность значения Win32_ComputerSystem.Name.
Если я сяду, скажем, на MSN-LEED02 и выполню команду Powershell Get-WmiObject Win32_ComputerSystem
он возвращает несколько полей, и поле Name действительно MSN-LEED02.
Однако, если я открою wbemtest, перейду в Enum Classes, найду Win32_ComputerSystem и посмотрю на его свойства, значение Name будет нулевым.
Последнее, что я пробовал, это использовать этот сторонний инструмент для проверки фильтра сверху. И MSN-LEED01, и MSN-LEED02 возвращают истину, хотя, например, (Name! = MSN-LEED01) должно быть ложным, так как имя кажется равным MSN-LEED01.
Кто-нибудь знает, что я делаю не так с фильтром?
Замените «ИЛИ» на «И» в своем запросе:
SELECT * FROM Win32_ComputerSystem WHERE (Name != "MSN-LEED01" AND Name != "MSN-LEED02")
Однако вы можете просто добавить компьютеры (или группу безопасности AD, содержащую эти компьютеры) на вкладке «Делегирование» в управлении групповой политикой и запретить «Применить групповую политику» (и также запретить «Чтение», если вы хотите предотвратить Эти компьютеры применяют параметры «Пользователь» групповой политики), это более эффективно, чем фильтр WMI, и его проще обслуживать.