Показать полную графическую версию : [решено] Фильтр отсутствия установленной программы
Необходимо было создать 2 WMI-фильтра для управлениями групповыми политиками средствами WQL
1) Выбрать компьютеры с установленным Office любой версии. Тут все получилось SELECT * FROM Win32_Product WHERE Name LIKE "Microsoft Office%"
2) Выбрать те компьютеры, где MS Office не установлен, т.е. обратный первому. Просто вставить NOT перед LIKE не получилось. Можете помочь с написанием данного скрипта.
p.s. Еще столкнулся с проблемой определения компьютеров с 32-битной ОС. В 7-ке есть параметр "OSArchitecture", но в XP его нет и крипт вызывает ошибку.
1) SELECT * FROM Win32_Product WHERE NOT Name LIKE "Microsoft Office%"
2) Для Xp -
x86 - SELECT * FROM Win32_OperatingSystem WHERE Caption='Microsoft Windows XP professional'
x64 - SELECT * FROM Win32_OperatingSystem WHERE Caption='Microsoft(R) Windows(R) XP professional x64 edition'
1) Запрос выполняется, но при этом выводится все ПО, которое не относится к MS Office, а необходимо, чтобы он возращал NULL при этом.
2) Необходимо учитывать Windows 2000, Windows Vista и Windows 7, которые могут быть 32-разрядными. Пока напрашивается перечисление через OR всех Caption, но это не красивое решение.
Для 2000 можно сделать,тот же фильтр что и для XP. А начиная с Vista можно использовать OSArchitecture.
Как в одном фильтре учесть все системы, ведь в групповой политике можно указать лишь один фильтр?
я бы попробовала так:
SELECT * FROM Win32_Product WHERE Name LIKE "Microsoft Office%" IS NULL
или так:
SELECT NULL FROM Win32_product WHERE Name LIKE "Microsoft Office%"
Необходимо учитывать Windows 2000 »
win2k не работает с WMI Filters.
p.s. Еще столкнулся с проблемой определения компьютеров с 32-битной ОС. В 7-ке есть параметр "OSArchitecture", но в XP его нет и крипт вызывает ошибку. »
SELECT * FROM Win32_ComputerSystem WHERE SystemType="x64-based PC"
SELECT * FROM Win32_ComputerSystem WHERE SystemType="x86-based PC"
на ХР отрабатывает.
В wbemtest первые запросы дают ошибку, а за определение битности - спасибо, работает.
SELECT * FROM Win32_Product WHERE Caption <>"Microsoft Office%"
а так?
Скрипт работает, но он выводит все установленные программы, которые не совпадают с "Microsoft Office%". А необходимо при наличии хотя бы одной записи об офисе возращать NULL (или FALSE) и, соответсвенно, не NULL при отсутствии записей о установленном MS Office. Просто нужно, чтобы групповая политика выполнилась для той группы компьютеров, где не установлен MS Office. Жаль, что нельзя Not применить к самому фильтру и не работает функция, возвращающая количество записей.
Поскольку уперся в тупик, решил пойти другим путем. Можно ли через WQL узнать, входит ли компьютер в определенную группу в домене?
iMirRor, политика применяется если найден хотя бы один экземпляр объекта, значит фильтр должен что-то находить и при отсутствии ПО. Лобовое решение - создание своих (пользовательских) классов/объектов на ВСЕХ компьютерах домена (например, свой экземпляр для каждой конкретной программы). WQL-запрос атрибута таких объектов позволит определить состояние установки конкретного ПО. Объекты могут создаваться скриптом вручную, через политики или распространяться через инфраструктуру инвентаризации оборудования SMS/SCOM.
пример реализации таких объектов с присвоением атрибутам значений параметров реестра:
Using WMI filters with Registry values (http://grouppolicy.editme.com/WMIFilters)
Если единиц такого ПО немного, думаю практичней будет использовать обычные переменные окружения, заполнив их требуемым значением через скрипт автозагрузки компьютера, что-нибудь типа: IsMsOfficeInstalled=True/False
MSOfficeVersion=0/10/11/..В WMI-фильтре указывать WQL-запрос класса Win32_Environment
входит ли компьютер в определенную группу в домене?»это вроде уже другая песня - Security Filtering (фильтры безопасности) (http://www.oszone.net/1261/)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.