Nous avons géré toute notre logique de ciblage pour les packages (et maintenant les applications) avec les collections. Maintenant que nous sommes passés de SCCM 2007 à SCCM 2012 SP1, il a été recommandé de déplacer cette logique vers le modèle de programme d'application et de l'implémenter à l'aide des conditions et exigences globales. Cela présente un certain nombre d'avantages positifs: les collections sont utilisées uniquement pour le regroupement hiérarchique ou logique, nous obtenons un déploiement d'application plus transparent lors de l'utilisation de la supercedence et une logique de détection améliorée.
Je vais utiliser Adobe Flash Player Plugin comme exemple. Nous souhaitons uniquement déployer le plug-in Adobe Flash Player sur les postes de travail sur lesquels Firefox est installé. En utilisant le modèle SCCM 2007 Package-Program, nous créerions une collection basée sur une requête WQL qui contiendrait tous les postes de travail avec Firefox installé:
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"
Une fois la collection créée, nous déploierions alors notre programme de packages. J'essaie de répliquer la même logique à l'aide de la logique Conditions générales et exigences du programme d'application. Toutes mes tentatives pour créer ma condition globale basée sur une requête WQL entraînent une erreur wbemErrTypeMismatch ( 2147749893 (0x80041005)
).
Maintenant que les meilleures pratiques recommandent que nous conservions notre logique de ciblage avec l'application, nous devons créer une condition globale de requête WQL appropriée, puis nous pouvons l'évaluer à l'aide des exigences de l'application.
Commençons par la requête WQL. J'ai utilisé Scriptomatic pour simplement vider tout dans la SMS_InstalledSoftware
classe WMI qui fait partie de l' root\cimv2\sms
espace de noms. Je suis raisonnablement sûr que SMS_InstalledSoftware est le meilleur endroit pour exécuter des requêtes lorsque vous essayez d'évaluer si quelque chose est installé ou non car Win32_Product est uniquement pour le logiciel installé Windows Installer.
Je trouve l'objet lié à Firefox suivant:
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
L'exécution du WQL sur la propriété ProductName semble être une bonne solution. Si je lance SELECT * FROM SMS_InstalledSoftware WHERE ProductName like '%Firefox%'
en wbemtest
contre l' root\cimv2\sms
espace de noms que je reçois le texte suivant:
Essayons de construire la condition globale dans SCCM ensuite:
C'est complètement peu intuitif mais je pense que je le comprends correctement. Les conditions globales viennent de configurer la partie conditionnelle de l'ensemble de la logique du programme d'application et non de la logique évaluative du programme d' application. Pour cette raison, je ne fais rien dans la clause WHERE. Cette condition globale doit rechercher dans l' root\cimv2\sms
espace de noms de la SMS_InstalledSoftware
classe et "renvoyer" la propriété ProductName. Je devrais maintenant être en mesure d'évaluer la valeur / s de cette propriété avec l'exigence de type de déploiement de mes applications, non?
Encore une fois - je ne comprends pas comment l'ensemble de la logique Condition globale / Exigences se tient ensemble ou c'est juste peu intuitif, mais l'exigence ci-dessus devrait être en mesure de regarder toutes les chaînes renvoyées par la ProductName
propriété, d'évaluer si l'une d'entre elles contient 'Firefox 'et, si heureux, déployez Adobe Flash Player Plugin.
Malheureusement ça ne marche pas. Presque toutes les machines du déploiement renvoient l'erreur suivante:
2147749893 (0x80041005) Type Mismatch
Je suppose que cela signifie que Global Condition renvoie un type de variable différent de celui que j'évalue dans mon exigence, mais je ne sais pas comment le résoudre à partir d'ici. J'ai essayé de définir le type de ma condition globale sur booléen et de définir la clause WHERE ( Name like '%Firefox%'
), mais cela génère la même erreur.
Comment puis-je répliquer ma collection basée sur une requête WQL à l'aide de la logique de ciblage Condition globale / Exigences du programme d'application? Qu'est-ce que je manque ici (à part apt-get)?