Infos zu PowerShell CodeSigning und ExecutionPolicy

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.

Bildschirmfoto APC

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
  1. Ö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.
  2. 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.
  3. Kopieren Sie den Inhalt aus dem Abschnitt „PowerShell Code“ in den Skript Block.
  4. Unter Argumenten fügen Sie zwei Argumente hinzu
    1. -PackagePath mit dem Pfad zum Paket. Bei unseren Templates ist dieser meist <Phase.PackagePath>\<Run.Version>
    2. -ExecutionPolicy mit der Ausführungsrichtlinie die Sie wünschen. Wenn Sie diesen Wert weg lassen wird AllSigned angenommen. Wir empfehlen sich für „AllSigned“ oder „Bypass“ zu entscheiden. Andere Werte können dafür sorgen, dass die Pakete fehlschlagen.
  5. 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“.
  6. 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)
Bildschrimfoto Pipeline

3 „Gefällt mir“