Wir haben unsere gesamte Targeting-Logik für Pakete (und jetzt Anwendungen) mit Sammlungen verarbeitet. Nachdem wir von SCCM 2007 zu SCCM 2012 SP1 gewechselt sind, wurde empfohlen, diese Logik in das Anwendungsprogrammmodell zu verschieben und sie unter Verwendung globaler Bedingungen und Anforderungen zu implementieren. Dies hat eine Reihe positiver Vorteile: Sammlungen werden ausschließlich für hierarchische oder logische Gruppierungen verwendet. Bei Verwendung von Supercedence erhalten wir eine nahtlosere Anwendungsbereitstellung und eine verbesserte Erkennungslogik.
Ich werde das Adobe Flash Player Plugin als Beispiel verwenden. Wir möchten das Adobe Flash Player Plugin nur auf Workstations bereitstellen, auf denen Firefox installiert ist. Unter Verwendung des SCCM 2007-Paketprogrammmodells würden wir eine Sammlung basierend auf einer WQL-Abfrage erstellen, die alle Arbeitsstationen mit installiertem Firefox enthält:
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"
Sobald wir die Sammlung erstellt hatten, stellten wir unser Paketprogramm dagegen bereit. Ich versuche, dieselbe Logik mithilfe der globalen Bedingungen und Anforderungslogik des Anwendungsprogramms zu replizieren. Alle meine Versuche, meine auf WQL-Abfragen basierende globale Bedingung zu erstellen, führen zu einem wbemErrTypeMismatch- Fehler ( 2147749893 (0x80041005)
).
Nachdem Best Practices empfohlen haben, unsere Targeting-Logik mit der Anwendung zu bündeln, müssen wir lediglich eine geeignete globale Bedingung für die WQL-Abfrage erstellen und diese dann anhand der Anforderungen der Anwendung bewerten.
Beginnen wir mit der WQL-Abfrage. Ich habe Scriptomatic verwendet, um einfach alles in der SMS_InstalledSoftware
WMI-Klasse zu sichern, die Teil des root\cimv2\sms
Namespace ist. Ich bin mir ziemlich sicher, dass SMS_InstalledSoftware der beste Ort ist, um Abfragen auszuführen, wenn versucht wird, zu bewerten, ob etwas installiert ist oder nicht, da Win32_Product nur für Windows Installer installierte Software ist.
Ich finde das folgende Firefox-Objekt:
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
Das Ausführen von WQL für die ProductName-Eigenschaft scheint ein guter Weg zu sein. Wenn ich SELECT * FROM SMS_InstalledSoftware WHERE ProductName like '%Firefox%'
auf wbemtest
den root\cimv2\sms
Namespace stoße, erhalte ich Folgendes:
Versuchen wir als nächstes, die globale Bedingung in SCCM zu erstellen:
Das ist völlig unintuitiv, aber ich denke, ich verstehe es richtig. Globale Bedingungen richten nur den bedingten Teil der gesamten Anwendungsprogrammlogik ein, nicht die auswertende Anwendungsprogrammlogik. Aus diesem Grund mache ich in der WHERE-Klausel nichts. Diese globale Bedingung sollte im root\cimv2\sms
Namespace nach der SMS_InstalledSoftware
Klasse suchen und die ProductName-Eigenschaft "zurückgeben". Ich sollte jetzt in der Lage sein, die Werte dieser Eigenschaft anhand der Anforderungen für den Bereitstellungstyp meiner Anwendungen zu bewerten, oder?
Nochmals - Ich verstehe entweder nicht, wie die gesamte Logik für globale Bedingungen / Anforderungen zusammenhängt, oder es ist nur so unintuitiv, aber die obige Anforderung sollte in der Lage sein, alle von der ProductName
Eigenschaft zurückgegebenen Zeichenfolgen anzuzeigen und zu bewerten, ob eine von ihnen 'Firefox' enthält 'und wenn ja, gerne das Adobe Flash Player Plugin bereitstellen.
Leider funktioniert es nicht. Fast alle Computer in der Bereitstellung geben den folgenden Fehler zurück:
2147749893 (0x80041005) Type Mismatch
Ich verstehe dies so, dass Global Condition einen anderen Variablentyp zurückgibt, als ich in meiner Anforderung auswerte, aber ich habe keine Ahnung, wie ich ihn von hier aus beheben kann. Ich habe versucht, den Typ meiner globalen Bedingung auf Boolean und die WHERE-Klausel ( Name like '%Firefox%'
) zu setzen, aber dies führt zu demselben Fehler.
Wie kann ich meine auf WQL-Abfragen basierende Sammlung mithilfe der Targeting-Logik für globale Bedingungen / Anforderungen des Anwendungsprogramms replizieren? Was vermisse ich hier (außer apt-get)?