Ergänzend zum Artikel über das PSAppDeployToolkit, möchte ich hier die Einbindung des Frameworks in Ivanti Endpoint Manager (EPM) zusammenfassen.

1. Return codes

Ein Return code mapping anlegen

Das PSAppdeploy Toolkit (PSADT) verwendet eigene Return Codes. Damit diese von EPM richtig interpretiert (Failed oder Success) und die Fehlerbeschreibungen dargestellt werden, muss zuerst ein Return code template angelegt werden.

In der EPM-Console im Bereich der Distribution Packages findet man den “Return code template manager” für diese Konfiguration. EPM Console - Distribution packages - Return code template manager EPM Console - Distribution packages - Return code template manager

Hier legt man ein neues Template an und pflegt die Return-Codes ein Add a new return code mapping
Add a new return code mapping

Return codes für Ivanti Endpoint Manager (EPM) anpassen

Hier kommt das große ACHTUNG! - Leider sind die Return codes des PSADT nicht mit Ivanti EPM kompatibel: Return codes muessen bei EPM zwischen -32768 und 32767 liegen
Returncodes müssen bei EPM zwischen -32768 und 32767 liegen

Darum müssen wir die Return codes (soweit im Script zugänglich) verändern. Leider gibt es aus Return codes die in der .exe einkompiliert sind oder anderweitig ausgegeben werden. Die Mühe diese Codes zu ändern habe ich mir nicht gemacht und es auch noch nicht gebraucht:

Default Returncodes EPM Edited Return Codes Meaning
60000 - 68999 20000 - 28999 Reserved for built-in exit codes in Deploy-Application.ps1, Deploy-Application.exe, and AppDeployToolkitMain.ps1
69000 - 69999 69000 - 69999 Recommended for user customized exit codes in Deploy-Application.ps1
70000 - 79999 70000 - 79999 Recommended for user customized exit codes in AppDeployToolkitExtensions.ps1
60001 20001 An error occurred in Deploy-Application.ps1. Check your script syntax use.
60002 20002 Error when running Execute-Process function
60003 20003 Administrator privileges required for Execute-ProcessAsUser function
60004 20004 Failure when loading .NET Winforms / WPF Assemblies
60005 20005 Failure when displaying the Blocked Application dialog
60006 60006 AllowSystemInteractionFallback option was not selected in the config XML file, so toolkit will not fall back to SYSTEM context with no interaction.
60007 20007 Failed to export the schedule task XML file in Execute-ProcessAsUser function
60008 20008 Deploy-Application.ps1 failed to dot source AppDeployToolkitMain.ps1 either because it could not be found or there was an error while it was being dot sourced.
60009 20009 The -UserName parameter in the Execute-ProcessAsUser function has a default value that is empty because no logged in users were detected when the toolkit was launched.
60010 60010 Deploy-Application.exe failed before PowerShell.exe process could be launched.
60011 60011 Deploy-Application.exe failed to execute the PowerShell.exe process.
60012 20012 A UI prompt timed out or the user opted to defer the installation.
60013 20013 If Execute-Process function captures an exit code out of range for int32 then return this custom exit code.

Die Return codes habe ich in den hier beschriebenen Dateien vorgenommen. Alles dokumentiert durch Kommentare in den Dateien bzw. durch das Changelog von git (ein Versionierungssystem zu verwenden sei für jede Skripting-Arbeit empfohlen!)

Deploy-Application.ps1

60001 -> 20001
a9a73446dab3385bcc0ba149a8b408e9.png
60002 -> 20002
51c8024cd50ed169f0b663fa27e3a4bc.png

AppDeployToolkitMain.ps1

60003 -> 20003
a5d825812a4061d68d91906b628cf036.png
60004 -> 20004
60005 -> 20005
60007 -> 20007
60008 -> 20008
60009 -> 20009
60012 -> 20012
60013 -> 20013

EPM Return code template

EPM Console - Distribution packages - Return code template manager

Als fertiger Download zum Import:

PSAppDeploy.ldms

2. Ein Distribution package mit PSADT erstellen

Auf seinem EPM-Core-Server Share legt man nun einen Software-Ordner wie im Beispiel aus dem anderen Artikel beschrieben ab. z.B.: http://coreser.fqdn/Software/Cisco/Jabber/Version/

4e700f7da773d8e68de50b8c5295ffc5.png

Wie im PSAppDeployToolkit erwähnt nutze ich in der Regel die Deploy-Application.exe

Darum erstellen wir das neue package vom Typ Executable package und verlinken die Deploy-Application.exe als Primary package file. Ob dabei UNC oder http genutzt wird, ist vielleicht mal einen separaten Artikel wert. (Es funktioniert natürlich beides!) Executable package - Package information Executable package - Package information

Da das .ps1 im Beispiel umbenannt wurde (Default = Deploy-Application.ps1) muss es hier explizit angegeben werden. Die restlichen Schalter kann man im verlinkten Manual nachlesen. Executable package - Install/Uninstall options Executable package - Install/Uninstall options

".\Deploy-Application-CiscoJabber-Update.ps1" -DeploymentType "Install" -AllowRebootPassThru

Ich empfehle immer als 64-bit auszuführen. Da viele der gängigen Powershell commandlets eher unter dieser bitness zu finden sind. Ob PSADT auch mit 32-bit gut funktioniert habe ich nicht getestet. Executable package - Architecture options Executable package - Architecture options

Wichtig! - Hier verlinkt man nun alle Dateien des Toolkits und die Install-sourcen. Executable package - Additional files Executable package - Additional files

Empfehlung - Immer einen timeout nutzen! Sollte bei der Installation irgendetwas hängen bleiben, läuft der Task sonst für immer! Das blockt viele Funktionen des EPM-Agents! Executable package - Timeout settings Executable package - Timeout settings

Und endlich können wir unser Return code template zuweisen. Executable package - Agent return code Executable package - Agent return code