13.11.2013

SCCM 2012 – Paketieren mit AutoIT v3 & SCCM

Kommt Ihnen dieses Problem bekannt vor? Sie müssen eine Software paketieren, dabei sollen Sie aber nicht nur die normale automatisierte Installation durchführen, sondern auch Anpassungen an den Grundeinstellungen vornehmen, Registry Keys setzen oder laufende Prozesse überprüfen.

Das Ganze soll natürlich auch noch übersichtlich bleiben, ohne hunderte Zeilen von Code, und außerdem soll keine teure Paketierungssoftware verwendet werden, welche am Ende vielleicht nur Datenmüll fabriziert.

Wir möchten in diesem Artikel ein kleines Beispiel zeigen, wie dies relativ einfach mit dem Freeware-Tool AutoIT funktioniert.

Was brauchen wir dazu:

Die folgenden Schritte zeigen stichpunktartig, wie man FileZilla 32-bit mit AutoIT paketiert/automatisiert und Programmanpassungen durchführt. Außerdem werden wir für die Deinstallation ebenfalls ein Skript erzeugen, denn der FileZilla Uninstaller (uninstall.exe) ist leider nicht dafür geeignet, direkt von SCCM angesprochen zu werden. Dies führt zu einem Fehler im Software Center: „Uninstall failed“. Der Hintergrund hierbei ist, dass die Datei „uninstall.exe“ von FileZilla nicht selbst die Deinstallation durchführt, sondern die Datei „au_.exe“ aufruft. Der Prozess „uninstall.exe“ wird aber zwischenzeitlich beendet, weshalb der SCCM-Client davon ausgeht, dass die Deinstallation abgeschlossen ist, und seine „Detection Rule“ erneut prüft. Da er zu diesem Zeitpunkt aber von der „Detection Rule“ die Rückmeldung bekommt, dass die Software noch installiert ist, geht er von einem Fehler aus und meldet „Uninstall failed“. Deshalb ist für die Deinstallation ebenfalls ein Skript notwendig. 

Schritt 1: AutoIT installieren
AutoIT wird ganz normal auf der Workstation installiert. Dabei wird automatisch der Skript-Editor mitinstalliert, welcher ideal zum Erstellen unserer Skripte ist. Um ein AutoIT-Skript auszuführen, wird entweder die AutoIT3.exe mit dem Skript als Parameter aufgerufen oder das Skript in eine ausführbare .exe-Datei kompiliert.

Schritt 2: Installationsskript erstellen
Das folgende Skript installiert FileZilla und kopiert die Files „Filezilla.xml“ (allgemeine Programmoptionen wie AutoUpdate) sowie „Sitemanager.xml“ (gespeicherte FTP Sites) in das Userprofil des aktuell angemeldeten Benutzers. ACHTUNG: Die Installation muss als „Install for user“ im SCCM angelegt werden, damit die Umgebungsvariable den richtigen Wert hat. Wenn das Programm in einer Tasksequenz installiert werden soll, könnte man hier die Files in das Default User Profile kopieren.

;ScriptOptionen festlegen
Opt("ExpandEnvStrings",1);Umgebungsvariablen interpretieren

;Filezilla Installer Silent auftrufen
$exitcode = RunWait("FileZilla_3.7.3_win32-setup.exe /S")

;Filezilla Default Einstellungen vorgeben
FileCopy("Filezilla.xml","%userprofile%\AppData\Roaming\Filezilla\Filezilla.xml",8);Programmoptionen
FileCopy("sitemanager.xml","%userprofile%\AppData\Roaming\Filezilla\sitemanager.xml",8);vorgegebene FTP-Server

exit $exitcode

Schritt 3: Skript für die Deinstallation
Das Deinstallationsskript ruft den Uninstaller mit dem Parameter /S auf und wartet anschließend darauf, dass der Prozess au_.exe geschlossen wird. Der Timeout beträgt 60 Sekunden. Dies führt dazu, dass die Deinstallation auch wirklich abgeschlossen ist, bevor der SCCM die Prüfung der „Detection Rule“ durchführt.

;ScriptOptionen festlegen
Opt("ExpandEnvStrings",1);Umgebungsvariablen interpretieren

$exitcode = RunWait("%programfiles%\FileZilla FTP Client\uninstall.exe /S")
ProcessWaitClose("au_.exe",60)

exit $exitcode

Beide Skripte liefern als Rückgabewert den Rückgabewert des eigentlichen Installations- bzw. Deinstallationsprozesses. Liefert eine Installation den Rückgabewert 3010, was soviel wie „Neustart erforderlich“ bedeutet, gibt das Skript diesen Wert auch an den SCCM zurück. Das ist wichtig, damit der SCCM diese Daten weiterverarbeiten kann.

Schritt 4: Applikation im SCCM anlegen
Wir erstellen im SCCM eine neue Applikation mit Namen „FileZilla“ und einen neuen Deployment Type „AutoIT Script Installer“. Als Content-Ordner geben wir unseren Quellordner an, in welchem die Installationsdateien von FileZilla liegen. Außerdem liegen dort auch unsere Skripte sowie die AutoIt3.exe, welche mit auf den Client kopiert werden muss, damit unser Skript auch lauffähig ist. Da wir in unseren Skripten auch noch zwei Files kopieren, müssen diese auch in den Quellordner.

Im Register „Programs“ des Deployment Type sollte es so aussehen:

Da wir eine 32-bit-Applikation paketieren, nutzen wir die 32-bit-Variante von AutoIT und setzen im SCCM den Haken „Run installation and uninstall programs as 32-bit process on 64-bit clients“. Dies führt dazu, dass unsere Installation sowohl auf 32-bit- als auch auf 64-bit-Betriebssystemen funktionieren wird.

Als Detection Method können wir einen Registry Key verwenden.

Auch hier ist der Haken wichtig: „This registry key is associated with a 32-bit application on 64-bit systems“.

Das führt auch hier wieder dazu, dass die Registry Keys auf 64-bit-Systemen entsprechend umgeleitet werden. Der Key auf einem 64-bit-System würde nämlich so lauten:
SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Filezilla Client

Wie angekündigt sollte die „Installation behavior” auf „Install for user“ stehen, damit unsere Files in den richtigen Pfad kopiert werden.

Wenn wir hier noch das Verhalten der Applikation auf „Determine behavior based on return codes” festlegen, ist es vom Rückgabewert abhängig, wie sich der SCCM-Client verhält (z.B. Return Code 3010 -> Neustart).

Hier ein Beispielcode dazu:

;ScriptOptionen festlegen
Opt ("ExpandEnvStrings",1);Umgebungsvariablen interpretieren

;Filezilla Installer Silent aufrufen
$exitcode = RunWait("FileZilla_3.7.3_win32-setup.exe /S")

;Filezilla Default Einstellungen vorgeben
FileCopy("Filezilla.xml","%userprofile%\AppData\Roaming\Filezilla\Filezilla.xml",8);Programmoptionen
FileCopy("sitemanager.xml","%userprofile%\AppData\Roaming\Filezilla\sitemanager.xml",8)vorgegebene FTP Server

exit 3010

Auf dem Client sieht es dann beispielsweise so aus, wenn ein Neustart angefordert wird:

Schritt 5: Applikation verteilen
Jetzt kann die Applikation wie gewohnt mit dem SCCM verteilt werden.

Haben Sie Fragen zu SCCM oder anderen System-Center-Produkten? Kontaktieren Sie einen unserer Consultants für System Center 2012:
Lutz Kral (lutz.kral‎@‎netlogix.de)
Daniel Jelinek (daniel.hoch‎@‎netlogix.de)

Daniel Jelinek
Senior Consultant

Unsere Blogs