Hallo zusammen,
das wichtigste zuerst, wenn man sich nun intensiver mit PowerShell beschäftigen möchte, muss man seine Umgebung anpassen, um lokal Skripte ausführen zu können/dürfen.
Dazu dient das cmdlet „Set-ExecutionPolicy“
Es gibt 5 verschieden Policy Einstellungen
Restricted = Die Powershell führt keine Skripte aus. Das ist der Defaulwert für die Powershell.
AllSigned = Die Powershell startet nur Skripte, die eine digitale Signatur haben.
RemoteSigned = Die Powershell wird keine Skripte ausführen, die aus dem Internet stammen – außer sie haben eine digitale Signatur.
Unrestricted = Die Powershell ignoriert die digitalen Signatur, fragt aber nach, ob ein Skript, das aus dem Internet stammt, ausgeführt werden soll.
Bypass = Alle Skripte werden ohne Nachfrage ausgeführt (Sehr unsicher)
Undefined = Setzt den Defaultwert auf Restricted, sobald Gruppenrichtlinien im Einsatz sind, hat dieser Schalter keine Auswirkung.
Wenn man nun lokal Skripte ausführen möchte, setzt man dementsprechend seine ExecutionPolicy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Get-ExecutionPolicy -List | Format-List Scope : MachinePolicy ExecutionPolicy : Undefined Scope : UserPolicy ExecutionPolicy : Undefined Scope : Process ExecutionPolicy : Undefined Scope : CurrentUser ExecutionPolicy : Undefined Scope : LocalMachine ExecutionPolicy : Restricted |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Set-ExecutionPolicy RemoteSigned Ausführungsrichtlinie ändern Die Ausführungsrichtlinie trägt zum Schutz vor nicht vertrauenswürdigen Skripts bei. Wenn Sie die Ausführungsrichtlinie ändern, sind Sie möglicherweise den im Hilfethema "about_Execution_Policies" unter "http://go.microsoft.com/fwlink/?LinkID=135170" beschriebenen Sicherheitsrisiken ausgesetzt. Möchten Sie die Ausführungsrichtlinie ändern? [J] Ja [N] Nein [H] Anhalten [?] Hilfe (Standard ist "J"): J Get-ExecutionPolicy -List | Format-List Scope : MachinePolicy ExecutionPolicy : Undefined Scope : UserPolicy ExecutionPolicy : Undefined Scope : Process ExecutionPolicy : Undefined Scope : CurrentUser ExecutionPolicy : Undefined Scope : LocalMachine ExecutionPolicy : RemoteSigned |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Set-ExecutionPolicy Unrestricted Ausführungsrichtlinie ändern Die Ausführungsrichtlinie trägt zum Schutz vor nicht vertrauenswürdigen Skripts bei. Wenn Sie die Ausführungsrichtlinie ändern, sind Sie möglicherweise den im Hilfethema "about_Execution_Policies" unter "http://go.microsoft.com/fwlink/?LinkID=135170" beschriebenen Sicherheitsrisiken ausgesetzt. Möchten Sie die Ausführungsrichtlinie ändern? [J] Ja [N] Nein [H] Anhalten [?] Hilfe (Standard ist "J"): J Get-ExecutionPolicy -List | Format-List Scope : MachinePolicy ExecutionPolicy : Undefined Scope : UserPolicy ExecutionPolicy : Undefined Scope : Process ExecutionPolicy : Undefined Scope : CurrentUser ExecutionPolicy : Undefined Scope : LocalMachine ExecutionPolicy : Unrestricted |
Sobald man aber in einen Firmenumfeld Powershell Skripte einsetzen möchte, sollte man seine fertigen Skripte mit einem Zertifikat signieren. Ob das Sinnvoll ist oder nicht, muss natürlich jeder für sich selbst entscheiden. Es gibt natürlich auch hier Mittel und Wege das ganze auszuhebeln, aber für unerfahrene Mitstreiter eine kleine Lebensaufgabe.
Hier die Vorbereitung um Firmenweit seine Powershellskripte zu signieren:
Als erstes erstelle ich eine neue Gruppenrichtlinien für die Domain, diese Gruppenrichtlinie verknüpfe ich mit der Domain.
Computerkonfiguration –> Richtlinien –> Administrative Vorlagen –> Windows-Komponenten –> Windows Powershell –> Skriptausführung aktivieren (Nur signierte Skripte zulassen)
Wenn man nun mit gpupdate /force die Gruppenrichtlinien aktualisiert, bekommt man beim Öffnen von PowerShell eine Fehlermeldung. (Bei mir war bereits eine PowerShell Profildatei hinterlegt)
Danach erstelle ich mir in Active Directory eine neue Rollengruppe und füge alle Mitglieder hinzu, die PowerShellSkripte signieren dürfen.
Jetzt öffne ich meine AD Zertifizierungsstelle und lege eine neue Zertifikatsvorlage an. Diese Zertifikatsvorlage Veröffentliche ich im Anschluss.
Alle Benutzer die berechtigt sind, Skripte zu signieren. Öffnen nun eine neue MMC Konsole und fügen sich das SnapIn Zertifikate/Eigenes Benutzerkonto hinzu.
Unter Eigene Zertifikate –> Zertifikate –> Neu Aufgaben –> Neues Zertifikat anfordern, fordern nun die Benutzer ein Codesigning Zertifikat an.
Und mit folgenden beiden Befehlen kann man seine Skripte signieren
1 2 |
$Cert = Get-ChildItem Cert:\CurrentUser\My\ -Recurse -CodeSigningCert Set-AuthenticodeSignature <Pfad>\PowershellScript.ps1 $Cert |
Sobald die Gruppenrichtlinie AllSigned gesetzt wurde, kann man diese nicht mehr !vorübergehen! außer Kraft setzen.
Viel Spaß und bis die Tage
Helmut