So kannst du ein PowerShell Script signieren

Per PowerShell Script signieren! Wie funktioniert das? Die Windows PowerShell ist prinzipiell sehr auf Sicherheit bedacht. Aus diesem Grund darf man Scripte auch nicht einfach ausführen. Es gibt die ExecutionPolicies, mit welchen festgelegt wird, wann ein Script ausgeführt werden darf.

Für die Konfiguration dieser Richtlinie gibt es, wie in der Tabelle ersichtlich, verschiedene Möglichkeiten.

OptionBeschreibung
UnrestrictedSkripte werden ausgeführt. Bei Skripten nicht vertrauenswürdiger Quellen erfolgt eine Abfrage.
RemoteSignedAlle Skripte fremder Quellen müssen digital von einem vertrauenswürdigen Herausgeber signiert sein. Lokale Skripte werden ausgeführt.
AllSignedJedes Skript muss von einem vertrauenswürdigen Herausgeber signiert sein.
restrictedStandardwert; es werden keine Skripte ausgeführt. Die PowerShell kann nur interaktiv verwendet werden
bypassSkripte werden ohne Blockierung, Nachfragen oder Warnungen ausgeführt.

Klar sollte sein, dass die unsicherste Variante unrestricted ist und die sicherste Variante AllSigned ist. Aus diesem Grund möchte ich in dieser Anleitung mal zeigen, wie man PowerShell Scripte signiert.

Da ich allerdings ein selbst signiertes Zertifikat verwende, muss ich die Policy auf RemoteSigned einstellen. Das bedeutet alle Scripte, die man anschließend ausführen möchte, sei es jetzt fremde oder selbsterstellte, müssen passend signiert sein.

Mit der PowerShell Script signieren

Um jetzt per PowerShell Script signieren zu können, muss als Erstes von seiner Zertifizierungsstelle ein Zertifikat anfordern werden. Sollte man keine Zertifizierungsstelle zur Verfügung haben, so bietet die Windows PowerShell auch die Möglichkeit eigene Zertifikate zu erstellen.

Allerdings ist dies dann natürlich kein öffentliches Zertifikat. Für Testzwecke aber einwandfrei geeignet. Das nötige Cmdlet hierfür ist New-SelfSignedCertificate

New-SelfSignedCertificate -CertStoreLocation 'Cert:CurrentUserMy' -Subject "CN=TestCodeSigning" -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.3"

Per PowerShell Script signieren
Ein Windows PowerShell Script selbst signieren

Details zu den einzelnen verschiedenen Argumenten mit dessen Optionen und Einstellungen können auf der Technet Seite nachgelesen werden.

Nach der Erstellung des Zertifikats kann man sich diese auflisten lassen. Anschließend liest man das Zertifikat aus (per [0] und legt es in eine Variable ($cert). Genau aus dieser Variable heraus nimmt man zu guter Letzt das Zertifikat um sein Script zu signieren.

dir Cert:CurrentUserMy
$cert = @(dir "Cert:CurrentUserMy")[0]
Set-AuthenticodeSignature .testscript.ps1 $cert

Windows PowerShell vollständig signiertes Script
Windows PowerShell vollständig signiertes Script

Ein signiertes Script erkennt man anschließend daran, dass am Ende eine lange Zahlenreihe steht. Diese beginnt mit „SIG # Beginn signature Block“.

Dieser Artikel beinhaltet Partner-Links. Durch einen Klick darauf ge­lan­gt ihr direkt zum Anbieter. Solltet ihr euch dort für einen Kauf entscheiden, erhält IT-Learner eine kleine Provision. Der Preis ändert sich für euch nicht. Danke für eure Unterstützung! Letzte Aktualisierung am 30.06.2024

Da hier in meinem Beispiel ein selbsterstelltes Zertifikat verwendet wurde, muss die Executionpolicy auf RemoteSigned gestellt werden. Andernfalls müsste das Zertifikat zu den vertrauenswürdigen hinzugefügt werden.

Wenn du mehr über die Windows PowerShell lernen möchtest, so findest du auch immer hervorragende und ausführliche Kurse auf Udemy. Zu empfehlen sind die Kurse von Patrick Grünauer: Der Einsteigerkurse ist dabei folgender: Automatisierung mit PowerShell (1/3): Grundlagen.*

f2901adf9f71462a97d8e6eda5e803ae
Der Blogbetreiber und Autor: Markus Elsberger

Über den Autor

Mein Name ist Markus Elsberger und ich beschäftige mich mit der Administration von Windows und Linux Systemen sowie mit diversen Themen bzgl. Netzwerktechnik. In meiner Lehrtätigkeit erstelle ich verschiedene Szenarien und teste auch verschiedene Konfigurationen, welche ich in diesem Blog festhalten möchte.


Kostenlose Befehlsreferenzen und E-Books
(Netzwerkanalyse, Benutzerverwaltung, Festplattenkonfiguration, u. v. m.)


4 Kommentare zu „So kannst du ein PowerShell Script signieren“

    1. Markus Elsberger

      Hallo Peter, seltsam. Ich habe es gerade nochmal getestet und es hat funktioniert. Verwendest du einen Windows Server oder ein Windows 10 System. Gruß Markus

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

×