Мы обрабатывали всю нашу логику таргетинга для пакетов (а теперь и приложений) с коллекциями. Теперь, когда мы перешли с SCCM 2007 на SCCM 2012 с пакетом обновления 1 (SP1), было рекомендовано перенести эту логику в модель Application-Program и реализовать ее с использованием глобальных условий и требований. Это имеет ряд положительных преимуществ: коллекции используются исключительно для иерархической или логической группировки, мы получаем более плавное развертывание приложений при использовании Supercedence и улучшенную логику обнаружения.
Я буду использовать плагин Adobe Flash Player в качестве примера. Мы хотим развернуть плагин Adobe Flash Player только на рабочих станциях, на которых установлен Firefox. Используя модель SCCM 2007 Package-Program, мы создали бы Collection на основе WQL-запроса, который содержал бы все рабочие станции с установленным Firefox:
select * from SMS_R_System inner join SMS_G_System_SoftwareProduct
on SMS_G_System_SoftwareProduct.ResourceId = SMS_R_System.ResourceId
where SMS_G_System_SoftwareProduct.ProductName like "Mozilla Firefox"
После создания Коллекции мы развернем нашу Пакет-Программу. Я пытаюсь повторить ту же логику, используя логику глобальных условий и требований прикладной программы. Все мои попытки построить глобальное условие на основе WQL-запроса приводят к ошибке wbemErrTypeMismatch ( 2147749893 (0x80041005)
).
Теперь, когда лучшие практики рекомендуют нам поддерживать нашу логику таргетирования в комплекте с Приложением, нам нужно создать соответствующий WQL-запрос Global Condition, а затем мы можем оценить его, используя Требования Приложения.
Начнем с запроса WQL. Я использовал Scriptomatic, чтобы просто сбросить все в классе SMS_InstalledSoftware
WMI, который является частью root\cimv2\sms
пространства имен. Я вполне уверен, что SMS_InstalledSoftware - лучшее место для выполнения запросов при попытке оценить, установлено ли что-то или нет, так как Win32_Product предназначен только для программного обеспечения, установленного установщиком Windows.
Я нахожу следующий связанный с Firefox объект:
ARPDisplayName: Mozilla Firefox 23.0.1 (x86 en-US)
ChannelCode:
ChannelID:
CM_DSLID:
EvidenceSource: CPXCCCCCCXCXCXCXXXXXCXXXXX
InstallDirectoryValidation: 4
InstalledLocation: C:\Program Files (x86)\Mozilla Firefox
InstallSource:
InstallType: 0
Language: 0
LocalPackage:
MPC:
OsComponent: 0
PackageCode:
ProductID:
ProductName: Mozilla Firefox 23.0.1 (x86 en-US)
ProductVersion: 23.0.1
Publisher: Mozilla
RegisteredUser:
ServicePack:
SoftwareCode: mozilla firefox 23.0.1 (x86 en-us)
SoftwarePropertiesHash: 63896ed23146ec91dbc763b45c127ba31216e2f9d657a87953440d30b7f306bc
SoftwarePropertiesHashEx: 67c2ecc42f0e0b9da6ee55bc0dea67a4d90b9e8452c9fdb25db57d4891698f25
UninstallString: "C:\Program Files (x86)\Mozilla Firefox\uninstall\helper.exe"
UpgradeCode:
VersionMajor: 2147483647
VersionMinor: 2147483647
Запуск WQL для свойства ProductName кажется хорошим способом. Если я бегу SELECT * FROM SMS_InstalledSoftware WHERE ProductName like '%Firefox%'
в wbemtest
отношении root\cimv2\sms
имен я получаю следующее:
Давайте попробуем создать глобальное условие в SCCM следующим образом:
Это совершенно не интуитивно понятно, но, думаю, я правильно понимаю. Глобальные условия просто устанавливают условную часть всей логики прикладной программы, а не оценочную логику прикладной программы. По этой причине я ничего не делаю в предложении WHERE. Это глобальное условие должно искать в root\cimv2\sms
пространстве имен SMS_InstalledSoftware
класс и «возвращать» свойство ProductName. Теперь я должен иметь возможность оценить значение / значения этого свойства с помощью требований к типу развертывания моих приложений, верно?
Опять же - я либо не понимаю, как вся логика Глобальных Условий / Требований соединяется вместе, либо это просто не интуитивно понятно, но вышеуказанное Требование должно быть в состоянии просмотреть все строки, возвращаемые из ProductName
свойства, оценить, содержат ли какие-либо из них «Firefox». и, если так, радостно разверните плагин Adobe Flash Player.
К сожалению, это не работает. Почти все машины в Deployment возвращают следующую ошибку:
2147749893 (0x80041005) Type Mismatch
Я предполагаю, что это означает, что Global Condition возвращает переменную другого типа, чем я оцениваю в своем Требовании, но я не знаю, как ее устранить здесь. Я попытался установить тип моего Глобального условия на Boolean и задать условие WHERE ( Name like '%Firefox%'
), но это приводит к той же ошибке.
Как я могу реплицировать мою коллекцию на основе запросов WQL, используя логику таргетинга глобальных условий / требований прикладной программы? Что мне здесь не хватает (кроме apt-get)?