Einführung

Die Verwendung einer Versionierung in den verschiedenen Tasksequenzen, die man so im Einsatz hat sollte eigentlich mittlerweile Standard sein. Dennoch stelle ich immer wieder fest, dass entweder bis dato darauf verzichtet wurde, oder, dass die Versionierung so umständlich implementiert ist, dass ein vernünftiges Reporting nur mit viel manuellem Aufwand möglich ist.

In diesem Beitrag möchte ich dir zeigen, wie du mit einfachen Mitteln eine Versionierung in deine Tasksequenzen einbauen kannst. Ich stelle dir dazu ein Skript zur Verfügung, welches alle relevanten Informationen in der lokalen Registry des Clients ablegt und ich zeige dir, wie du diese, nach Erweiterung der SCCM Hardware-Inventur, per SQL-Report abfragen kannst.

Ich habe das Skript so gestaltet, dass es in verschiedenen Umgebungen (z.B. verschiedene Kunden, oder verschiedene Systemumgebungen) schnell und einfach angepasst werden kann.

Allgemeines zum Skript

Vorab ein paar Informationen zum Skript:
  • Das Skript erzeugt am Client eine Log-Datei. Der Pfad der Log-Datei entspricht dem Wert der Built-in Tasksequenz-Variable _SMSTSLogPath zum Zeitpunkt der Ausführung des PowerShell-Skripts. Ich verwende für das Logging eine Funktion von @wasserja. Die aktuelle Version der Funktion findest du in der Technet Gallery. Weitere Informationen zur Funktion gibt es im Blog von ihm: http://mrautomaton.com
  • Das Skript erzeugt Registry Einträge auf Basis der folgenden Built-in Tasksequenz-Variablen: _SMSTSAdvertID, _SMSTSPackageID, _SMSTSPackageName, _SMSTSLaunchMode, _SMSTSMediaType
    Weitere Informationen zur den Variablen findest Du in der Dokumentation von SCCM: Integrierte Tasksequenzvariablen in System Center Configuration Manager
  • Jede Variable wird mit einem Prefix erzeugt, der über die Custom Tasksequenz-Variable OSDPurpose festgelegt wird. Dadurch kannst du das Skript für sämtliche Iterationen der Client-Installation verwenden und jeder Tasksequenz einen eindeutigen Prefix verpassen.
  • Zusätzlich wird die Custom Tasksequenz-Variable OSDReleaseVersion vom Typ [String] erzeugt, um als Versionsnummer für das Reporting zu dienen.

Verwendung des Skripts

Also, los geht’s. Öffne das Github-Repository und lade es herunter: OSD-Version auf Github.
Das Repository enthält 5 Dateien, mit recht eindeutigen Bezeichnungen:
  • Set-OSDVersion.ps1
    Das PowerShell-Skript, das die Informationen in die Registrierung schreibt
  • Sample-Configuration.mof
    Ein Beispiel für die Erweiterung der SCCM Hardware Inventur Klassen
  • Sample-HINVImport.mof
    Ein Beispiel, um die zuvor hinzugefügten Klassen in deine Client-Settings zu importieren
  • Sample-Regkey.reg
    Eine Beispiel Registry-Datei, damit du die Hardware-Inventur testen kannst, ohne den Client neu installieren zu müssen
  • Sample-SQLQuery.txt
    Eine SQL-Query, mit der du die Hardware-Inventur per Report erfassen kannst
Was musst Du nun tun, damit das Script die Informationen in die Registry schreibt?
  1. Lege dir ein SCCM-Package an. Das Package braucht kein Programm, aber es muss das PowerShell-Skript als Source-Datei enthalten
  2. Füge die drei Tasksequenz-Variablen hinzu (siehe Screenshot), die das Skript benötigt: OSDProviderBrand, OSDPurpose und OSDReleaseVersion
  3. Nun fügst Du an geeigneter Stelle (außerhalb von WinPE) deiner Tasksequenz einen „Run PowerShell Script“ Schritt hinzu. Verweise dabei auf das zuvor erstellte Package, trage den Namen der Script-Datei ein und verwende folgenden Parameter -OSDVersionPath Software\%OSDProviderBrand%\OSD_Version

Erweiterung der Hardware Inventur

Sobald dein Client dann neuinstalliert ist (oder du die Beispiel Registry Datei importiert hast) stehen die Informationen in der lokalen Registry. Um diese von der SCCM Hardware-Inventur erfassen zu lassen, verwenden wir das allseits bekannte Tool von Mark Cochrane: RegKeyToMof.

Dabei gibt es eigentlich nichts weiter zu beachten, als das die x64-Version der Registry-Schlüssel nicht benötigt wird, also stell sicher, dass das entsprechende Setting im Tool deaktiviert ist. Hast du die .mof-Dateien erstellt (alternativ kannst du die Beispiele aus dem Github-Repository verwenden), gilt es, diese zu importieren:

  • Erstelle ein Backup deiner „Configuration.mof“-Datei. Die Datei findest du in deinem SCCM-Installationsverzeichnis auf einer Primary Site unter „Installations-Verzeichnis\inboxes\clifiles.src\hinv“
  • Öffne die Configuration.mof und füge den Inhalt aus der ersten .mof-Datei aus dem RegKeyToMof Tool am Ende der Datei in den „AddedExtensions“-Bereich ein.
  • Öffne nun die Default Client Settings (auch wenn du für deine Clients ein oder mehrere extra-Settings verwendest, der Import wird immer in den Default Settings gemacht). Öffne dort den Bereich für die Hardware-Inventur und importiere die zweite .mof-Datei.
  • Aktualisiere auf deinem Client zunächst die Maschine-Policy und trigger im Anschluss daran die Hardware-Inventur.

Wenn alles funktioniert hat, kannst du nun in der Management-Console den Ressource-Explorer deines Clients öffnen und siehst dort die eingesammelten Versionierungs-Daten. Hat es nicht geklappt, so kannst Du dir folgenden Beitrag durchlesen, der genauer auf die Verwendung des Tools eingeht: How-To RegKeyToMof

SQL Reporting

Möchtest du die Daten für alle deine Clients abfragen, so geht das am besten per SQL-Report. Verwende hierfür z.B. folgende Abfrage (Beachte, dass ich in dem Beispiel gezielt auf Version 1.0.0 abfrage):

SELECT dbo.v_GS_OSD_Version0.Deploy_ReleaseVersion0, dbo.v_GS_OSD_Version0.Deploy_TasksequenceName0, dbo.v_GS_OPERATING_SYSTEM.InstallDate0, dbo.v_R_System.Name0,
dbo.v_GS_OSD_Version0.ResourceID, dbo.v_R_System.Operating_System_Name_and0
FROM dbo.v_GS_OSD_Version0 INNER JOIN
dbo.v_GS_OPERATING_SYSTEM ON dbo.v_GS_OSD_Version0.ResourceID = dbo.v_GS_OPERATING_SYSTEM.ResourceID INNER JOIN
dbo.v_R_System ON dbo.v_GS_OPERATING_SYSTEM.ResourceID = dbo.v_R_System.ResourceID
WHERE (dbo.v_GS_OSD_Version0.Deploy_ReleaseVersion0 LIKE '1.0.0')

So, das war’s für den Moment. Ich hoffe der Beitrag hat dir weitergeholfen. Sollte es irgendwelche Probleme geben, oder falls du einen Fehler entdeckt hast, kannst Du jederzeit einen Kommentar hinterlassen.

Grüße, Lukas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Name *