In diesem Beitrag möchte ich auf neue Funktionalitäten in unserem Applikation Package Center (kurz APC) als auch in unseren Paketen hinweisen.
Kurzer Hintergrund:
Wir bieten bereits seit dem Start des APC die Möglichkeit Skripts zu signieren. Allerdings war es nicht möglich über unsere Oberflächen eine Signaturprüfung zu erzwingen. Es wurde sich ausschließlich auf die Konfiguration des Systems via GPO/CSP verlassen.
Was ist neu?
Mit unseren Paketen startend ab Version 2023.06.12.01-283 und dem APC ab Version 4.1.5 ist es nun möglich im gesamten Produkt die Ausführungsrichtlinien für PowerShell zu definieren.
Wichtiger Hinweis
Sollte die Ausführungsrichtlinie für PowerShell via GPO/CSP auf dem ausführenden System definiert sein, wird die im APC/Paket definierten Einstellungen ignorert.
Wie kann ich diese Konfiguration anwenden?
Im APC befindet sich bei Aufgaben, die eine PowerShell Komponente beinhalten, ein Element mit der sich die Ausführungsrichtlinie definieren lässt. Als Beispiel dient hier das Bildschirmfoto.
Um die Ausführungsrichtlinien für Pakete zu definieren ist eine Änderung im Paket vorzunehmen. Dazu muss der Wert /AppDeployToolkit_Config/NxtPowerShell_Options/NxtPowerShell_ExecutionPolicy
in der AppDeployToolkitConfig.xml angepasst werden.
Da dieser Wert für jedes Paket erneut gesetzt werden muss, bietet es sich an, die Konfiguration in Ihre Pipelines zu implementieren.
Anleitung Pipeline
- Öffnen Sie eine beliebige Pipeline in der die Ausführungsrichtlinie angewendet werden soll. Im Pipelineablauf muss gewährleistet sein, dass das Paket in ausgepackter Form vorliegt. Dies wird in der Regel durch die „Entpacke ein Paket*“ Aufgabe übernommen.
- Fügen Sie einen Aufgabenschritt „Inline-Skript ausführen“ hinzu. Dieser muss vor Komprimierungs- oder Importaufgaben eingefügt werden, aber nachdem das Paket entpackt wurde. Sie können das Bildschirmfoto als Referenz heranziehen. Der Skripttyp ist PowerShell.
- Kopieren Sie den Inhalt aus dem Abschnitt „PowerShell Code“ in den Skript Block.
- Unter Argumenten fügen Sie zwei Argumente hinzu
-PackagePath
mit dem Pfad zum Paket. Bei unseren Templates ist dieser meist<Phase.PackagePath>\<Run.Version>
-ExecutionPolicy
mit der Ausführungsrichtlinie die Sie wünschen. Wenn Sie diesen Wert weg lassen wirdAllSigned
angenommen. Wir empfehlen sich für „AllSigned“ oder „Bypass“ zu entscheiden. Andere Werte können dafür sorgen, dass die Pakete fehlschlagen.
- In der Übergangsphase (bei Paketen vor 2023.06.12.01-283) wird dieses Skript fehlschlagen, da der Wert nicht existiert. Sofern Sie möchten, dass die Pipeline dennoch abgeschlossen wird, aktivieren Sie die Option „Bei Fehler fortfahren“.
- Speichern Sie die Pipeline
PowerShell Code
Param(
[Parameter(Mandatory=$true, Position=0)]
[ValidateScript({$_.Exists -and $_.GetDirectories("AppDeployToolkit")})]
[System.IO.DirectoryInfo]$PackagePath,
[Parameter(Mandatory=$false, Position=1)]
[ValidateScript({$_ -in [Enum]::GetNames([Microsoft.Powershell.ExecutionPolicy])})]
[string]$ExecutionPolicy = "AllSigned"
)
[System.IO.FileInfo]$appDeployToolkitConfigFile = $PackagePath.GetDirectories("AppDeployToolkit").GetFiles("AppDeployToolkitConfig.xml")
[xml]$appDeployToolkitConfigContent = New-Object xml
$appDeployToolkitConfigContent.Load($appDeployToolkitConfigFile.FullName)
$appDeployToolkitConfigContent.AppDeployToolkit_Config.NxtPowerShell_Options.NxtPowerShell_ExecutionPolicy = $ExecutionPolicy
$appDeployToolkitConfigContent.Save($appDeployToolkitConfigFile.FullName)