Kundenspezifische Erweiterungen (Custom Actions)
Anforderung
Es wird ein Mechanismus benötigt, für neue oder wiederherzustellende Computer während des OS-Deployments kundenspezifische Funktionen innerhalb der von mypOsDeploy bereitgestellten Task Sequence auszuführen.
Beispiele:
Anwenden spezifischer Richtlinien
Kopieren kundenspezifischer Daten oder Programme
...
Lösung
In mypOsDeploy werden ini-Dateien mit Aufrufparametern verwaltet, die in der Task Sequence abgearbeitet werden.
Dieses Funktion ist erst ab mypOsDeploy Version 1.4.1.4 verfügbar.
Start
Die definierten Custom Aktionen werden je nach Konfiguration an spezifischen Stellen der Task Sequence ausgeführt.
Aufruf-Hierarchie:
Prio 1: mypOsDeploy prüft, ob es im Verzeichnis Mandant\Konfiguration eine Datei CustomActions.ini gibt
Prio 2: mypOsDeploy prüft, ob es im Verzeichnis Mandant eine Datei CustomActions.ini gibt
An beiden Stellen kann ein weiteres Verzeichnis "CustomActions" angelegt werden, indem sich die erforderlichen Programme, Skripte usw. befinden. Das Verzeichnis darf leer sein, muss aber vorhanden sein, da es als aktuelles Verzeichnis für die Ausführung gesetzt wird, so dass die aufgerufenen Programme keine expliziten Pfadangaben benötigen.
Werden an beiden Lokationen keine ini-Dateien gefunden wird keine Custom-Action ausgeführt. Dies ist im Auslieferungszustand der Regelfall!
Mandant/Konfiguration
Bitte beachten Sie, dass beim Mandanten hinterlegte kundenspezifische Erweiterungen nicht! ausgeführt werden, wenn die Konfiguration bereits kundenspezifische Erweiterungen enthält!
Aufbau
Die Datei CustomActions.ini darf aus beliebig vielen aufsteigend numerierten Sections bestehen. Diese werden in aufsteigender Reihenfolge nacheinander abgearbeitet. Jede Section hat hierbei folgenden Aufbau:
[xxxx] ---fortlaufender Sectionname
Id= ---fortlaufende ID
Name= ---Name der Aktion
Description= ---Beschreibung (diese Beschreibung wird im Fortschrittsdialog des PE-Assistenten als aktuelle Aktion angezeigt)
Phase= ---entweder Prepare (wird nach der Treiber und vor der Anwendungsinstallation ausgeführt) oder Finalize (wird nach der Anwendungsinstallation ausgeführt)
Command= ---das auszuführende Kommando
Param= ---Parameter für das Programm
BreakOnError= ---False, wenn die Installation trotzdem weiterlaufen soll; True, wenn die Installation im Fehlerfall abgebrochen werden soll
IgnoreErrors= ---Pipe-getrennt alle Exitcodes <> 0, die ebenfalls als Erfolg angesehen werden sollen
Neben globalen Variablen darf für Kommando und Parameter die zusätzliche Variable CustomActionsDir benutzt werden. Diese wird zur Laufzeit durch das Verzeichnis ersetzt, welches sich unterhalb der aktuell ausgeführten CustomAction befindet.
Beispiel für eine CustomActions.ini
[0001]
Id=0001
Name=Sample Custom Action
Description=this is a sample custom action
Phase=Prepare
Command=%SYSTEMROOT%\System32\cslrunw.exe
Param=/statements:"MsgBox(""Hallo Welt"")"
BreakOnError=False
IgnoreErrors=
[0002]
Id=0002
Name=Sample Custom Action
Description=this is a sample Action for calling External Csl
Phase=Finalize
Command=%SYSTEMROOT%\System32\cslrunw.exe
Param=/Script:""%CustomActionsDir%\HelloWorld.csl""
BreakOnError=True
IgnoreErrors=0|1
[0003]
Id=0003
Name=Sample Custom Action
Description=this is a sample Action that causes an error
Phase=Prepare
Command=%SYSTEMROOT%\System32\cslrun_w.exe
Param=
BreakOnError=False
IgnoreErrors=
Section 1 führt hierbei ein einfaches Csl-Statements aus.
In Section 2 wird ein Csl ausgeführt und das auszuführende Csl über %CustomActionsDir% lokalisiert. Weiterhin wird festgelegt, dass neben 0 auch 1 ein zulässiger Rückgabewert ist. Alle anderen Fehler führen zum Abbruch.
Section 3 enthält ein Beispiel für ein Programm, welches nicht gestartet werden kann - über den BreakOnError-Schalter wird das aber ignoriert.
Die Sections 1 und 3 werden in der Vorbereitung ausgeführt, die Section 2 in der Finalisierungsphase.
Ausführung
Die von mypOsDeploy gestartete Task Sequence hat zwei Einsprungpunkte, um CustomActions auszuführen:
Nach der Installation von Betriebssystem und Treibern, aber vor der Installation von mypdeploy (Phase=Prepare).
Nach der Installation aller Anwendungen, aber vor der Ausführung von mypackage-Paketen, die explizit als “immer nach einer Voll-Installation ausführen” gekennzeichnet sind (Phase=Finalize).
mypOsDeploy liest die ini-Datei aus und führt die dort hinterlegten Anweisung hintereinander aus (wenn sie zur gerade aktiven Phase passen), bis
alle Sections abgearbeitet sind
eine Section einen Fehler liefert, der nicht mit "BreakOnError=False" ignoriert werden darf.
Im Fehlerfall wird die letzte erzeugte Fehlermeldung als Fehler im Abschlussbericht angezeigt und die Task Sequence beendet, ansonsten wird nach Abarbeitung der CustomActions die Task Sequence weiter geführt.
Lokaler Speicher
Die eigentliche Windows-Installation ist zu diesem Zeitpunkt beendet. Lokale abgelegte Dateien sind nach Abschluss der Task Sequence verfügbar; ebenso von CustomActions gesetzte Registry-Einträge.
Ablaufsteuerung
Die von Ihnen hinterlegten Aktionen werden ohne weitere Prüfung ausgeführt. Sie dürfen daher keine Aktionen ausführen, die den weiteren Ablauf der mypOsDeploy-Installation verhindern. Dazu gehören zum Beispiel
Ändern des lokalen Administratorpassworts
Anwenden von Gruppenrichtlinien auf den Rechner
Ändern von Task Sequence Variablen
Best Practice
Wir empfehlen “BreakOnError” immer auf “False” zu setzen, damit die eigentliche Betriebssystem-Installation immer zu Ende geführt werden kann.
Sie erhalten immer eine Protokolldatei “InstallCustomActions.log”, in der Sie ggf. auftretende Fehler in Ihren Anpassungen finden und diese dann nach Abschluss der Installation korrigieren können.
Tipp 1
Wenn Sie zu Testzwecken temporär einzelne Custom Actions nicht ausführen wollen, können Sie einfach in der entsprechenden Section den Eintrag “Phase” auf “None” setzen; dann übergeht die Task Sequence die Ausführung solange, bis Sie die Phase wieder auf “Prepare” oder “Finalize” setzen.
Tipp 2 Powershell
Wenn Sie in Ihren Custom-Actions Powershell-Scripte ausführen lassen wollen geben Sie eine explizite Freigabe für den Aufruf mit.
Beispiel:
Command=powershell.exe
Param=-ExecutionPolicy Bypass -f ""%PreStageActionsDir%\ThisIsMyScript.ps1""
führt das Powershell-Script ThisIsMyScript.ps1 aus und gibt als Rückgabewert das aus, das Sie über “Exit” setzen.
Command=powershell.exe
Param=-f ""%CustomActionsDir%\ThisIsMyScript.ps1""
wird nur dann ausgeführt, wenn die Ausführungsrichtlinien dies auch erlauben; ansonsten wird das Script immer mit Fehlercode 1 beendet werden, weil das Betriebssystem die Ausführung abweist.