Die Powershell ist der Nachfolger der Kommandozeile unter Windows. Wenn man ein Powershellskript ausführen möchte, kann man das nicht einfach per Doppelklick machen wie das mit .bat oder .cmd Dateien für die Kommandozeile möglich war.
Es kommt die Meldung, dass “die Ausführung von Skripts auf diesem System deaktiviert ist”. Wenn man die Sicherheitseinstellungen mit Get-ExecutionPolicy abfragt, bekommt man “Restricted”.
Um Skripte auszuführen, muss man also diese Sicherheitseinstellungen anpassen. Man kann dazu aus “AllSigned”, “RemoteSigned” und “Unrestricted” wählen. “Unrestricted” ist nicht zu empfehlen, weil dies dann Powershellskripten mit “bösem Code” die Türe öffnen würde. “AllSigned” ist die sicherste Variante, aber dann muss man alle Skripte digital signieren.
Um die “ExecutionPolicy” auf “AllSigned” zu setzen, kannn man eine Gruppenrichtlinie erstellen. Die entsprechende Einstellung findet sich unter “Computerkonfiguration” –> “Richtlinien” –> “Administrative Vorlagen” –> “Windows-Komponenten” –> “Windows PowerShell” –> “Skriptausführung aktivieren”.
Wenn man eine Microsoft CA (Certificate Authority” besitzt, kann man sich ein Zertifikat installieren, mit dem man das Skript signieren kann. Dazu muss man zuerst einmal eine “Code signieren” Vorlage erstellen.
Bei den Zertifikatsdiensten kann man eine neue “Auszustellende Zertifikatsvorlage” erstellen und “Codesignatur” auswählen.
Nun kann man über https://servername/certsrv ein Zertifikat anfordern:
Mit diesem Zertifikat kann man nun das Powershell Skript signieren:
$cert = Get-ChildItem cert:\CurrentUser\My –CodeSigningCert Set-AuthenticodeSignature –Certificate $cert –Filepath c:\script.ps1
Wenn man nun das Skript öffnet, sieht man, dass ganz unten ein Block mit der Signatur angefügt wurde.
Nun hat man also das Skript mit einem gültigen Zertifikat signiert. Wenn man es nun aber starten möchte, kommt der Hinweis, dass es von einem nicht vertrauenswürdigen Herausgeber stammt. Man kann zwar mit “A” angeben, dass man es immer ausführen möchte, aber das ist für vollautomatisches Ausführen ungeeignet. Also muss man das Zertifikat exportieren und zu den Vertrauenswürdigen Herausgebern kopieren.
Am besten verteilt man das Zertifikat aber über die Gruppenrichtlinien:
Das ganze Vorgehen ist zugegebenermassen aufwendig aber durchaus machbar. Somit erreicht man, dass nur signierte Skripte zugelassen werden, kann also mit hoher Sicherheit Powershellskripte verteilen.
Wenn man das Skript nun noch über SCCM verteilen möchten kann man das Skript zusammen mit einer Batchdatei als Paket verteilen. Die Batchdatei lautet dann:
@echo off
cd %~dp0
powershell.exe ./script.ps1