Powershell Skripte

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”.

ps01

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”.

ps02

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.

ps03

Nun kann man über https://servername/certsrv ein Zertifikat anfordern:

ps04

ps05

ps06

ps07

ps08

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 

ps09

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.

ps11

Am besten verteilt man das Zertifikat aber über die Gruppenrichtlinien:

ps12

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

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit deinem WordPress.com-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s