about_Execution_Policies

Kurzbeschreibung

Beschreibt die PowerShell-Ausführungsrichtlinien und erläutert, wie sie verwaltet werden.

Lange Beschreibung

Die Ausführungsrichtlinie von PowerShell ist ein Sicherheitsfeature, das die Bedingungen steuert, unter denen PowerShell Konfigurationsdateien lädt und Skripts ausführt. Dieses Feature trägt dazu bei, die Ausführung bösartiger Skripts zu verhindern.

Auf einem Windows-Computer können Sie eine Ausführungsrichtlinie für den lokalen Computer, für den aktuellen Benutzer oder für eine bestimmte Sitzung festlegen. Sie können auch eine Gruppenrichtlinieneinstellung verwenden, um Ausführungsrichtlinien für Computer und Benutzer festzulegen.

Ausführungsrichtlinien für den lokalen Computer und den aktuellen Benutzer werden in den PowerShell-Konfigurationsdateien gespeichert. Sie müssen keine Ausführungsrichtlinien in Ihrem PowerShell-Profil festlegen. Die Ausführungsrichtlinie für eine bestimmte Sitzung wird nur im Arbeitsspeicher gespeichert und geht verloren, wenn die Sitzung geschlossen wird.

Die Ausführungsrichtlinie ist keine Sicherheitsgrenze, sie ist tiefgehende Verteidigung. Beispielsweise können Benutzer eine Richtlinie einfach umgehen, indem Sie den Skriptinhalt in der Befehlszeile eingeben, wenn sie kein Skript ausführen können. Stattdessen hilft die Ausführungsrichtlinie Benutzern, grundlegende Regeln festzulegen und zu verhindern, dass sie unbeabsichtigt verletzt werden.

Weitere Informationen zu Sicherheitsgrenzen finden Sie im Abschnitt "Sicherheitsdienstkriterien " der PowerShell-Sicherheitsfeatures.

Auf Computern, die nicht Windows sind, ist Unrestricted die Standardausführungsrichtlinie und kann nicht geändert werden. Das cmdlet Set-ExecutionPolicy ist verfügbar, aber PowerShell zeigt eine Konsolenmeldung an, die nicht unterstützt wird. Gibt Get-ExecutionPolicy zwar auf Nicht-Windows-Plattformen zurückUnrestricted, das Verhalten stimmt jedoch wirklich übereinBypass, da diese Plattformen die Windows-Sicherheit Zonen nicht implementieren.

PowerShell-Ausführungsrichtlinien

Die Durchsetzung dieser Richtlinien erfolgt nur auf Windows-Plattformen. Die PowerShell-Ausführungsrichtlinien sind wie folgt:

  • AllSigned

    • Skripts können ausgeführt werden.
    • Erfordert, dass alle Skripts und Konfigurationsdateien von einem vertrauenswürdigen Herausgeber signiert werden, einschließlich Skripts, die Sie auf dem lokalen Computer schreiben.
    • Prompt Sie, bevor Sie Skripts von Publishern ausführen, die Sie noch nicht als vertrauenswürdig oder nicht vertrauenswürdig eingestuft haben.
    • Risiken beim Ausführen signierter, aber bösartiger Skripte.
  • Bypass

    • Nichts ist blockiert, und es gibt keine Warnungen oder Eingabeaufforderungen.
    • Diese Ausführungsrichtlinie wurde für Konfigurationen entwickelt, in denen ein PowerShell-Skript in eine größere Anwendung oder für Konfigurationen integriert ist, in denen PowerShell die Grundlage für ein Programm ist, das über ein eigenes Sicherheitsmodell verfügt.
  • Default

    • Legt die Standardausführungsrichtlinie fest.
    • RemoteSigned- für Windows-Clients und -Server.
  • RemoteSigned

    • Die Standardausführungsrichtlinie für Windows-Computer.
    • Skripts können ausgeführt werden.
    • Erfordert eine digitale Signatur von einem vertrauenswürdigen Herausgeber in Skripts und Konfigurationsdateien, die aus dem Internet heruntergeladen werden, einschließlich E-Mail- und Chatprogramme.
    • Erfordert keine digitalen Signaturen für Skripts, die auf dem lokalen Computer geschrieben und nicht aus dem Internet heruntergeladen werden.
    • Führt Skripts aus, die aus dem Internet heruntergeladen und nicht signiert sind, wenn sie freigegeben wurden, z. B. mithilfe des Cmdlets Unblock-File.
    • Risiken beim Ausführen von nicht signierten Skripts aus anderen Quellen als dem Internet und signierten Skripts, die böswillig sein könnten.
  • Restricted

    • Erlaubt einzelne Befehle, lässt jedoch keine Skripts zu.
    • Verhindert die Ausführung aller Skriptdateien, einschließlich Formatierungs- und Konfigurationsdateien (.ps1xml), Modulskriptdateien (.psm1) und PowerShell-Profile (.ps1).
  • Undefined

    • Im aktuellen Bereich ist keine Ausführungsrichtlinie festgelegt.
    • Wenn die Ausführungsrichtlinie in allen Bereichen Undefinedist, dann ist die effektive Ausführungsrichtlinie für Windows-Clients Restricted und RemoteSigned für Windows Server.
  • Unrestricted

    • Die Standardausführungsrichtlinie für Nicht-Windows Computer und kann nicht geändert werden.
    • Nicht signierte Skripts können ausgeführt werden. Es besteht das Risiko, böswillige Skripts auszuführen.
    • Warnt den Benutzer vor dem Ausführen von Skripts und Konfigurationsdateien, die nicht aus der lokalen Intranetzone stammen.

    Anmerkung

    Auf Systemen, die keine UNC-Pfade (Universal Naming Convention) von Internetpfaden unterscheiden, dürfen Skripts, die von einem UNC-Pfad identifiziert werden, möglicherweise nicht mit der RemoteSigned-Ausführungsrichtlinie ausgeführt werden.

Ausführungsrichtlinienbereich und Rangfolge

Sie können eine Ausführungsrichtlinie festlegen, die nur in einem bestimmten Bereich wirksam ist. Der Parameter akzeptiert die folgenden Werte:

  • MachinePolicy – Durch eine Gruppenrichtlinie für alle Benutzer des Computers festgelegt
  • UserPolicy – Durch eine Gruppenrichtlinie für den aktuellen Benutzer des Computers festgelegt
  • Process – Betrifft nur die aktuelle PowerShell-Sitzung
  • CurrentUser – Betrifft nur den aktuellen Benutzer
  • LocalMachine – Default Bereich, der sich auf alle Benutzer des Computers auswirkt

Anmerkung

MachinePolicy und UserPolicy werden von Gruppenrichtlinien festgelegt. Wenn Sie versuchen, den Bereich auf einen dieser Werte festzulegen, zeigt PowerShell eine Fehlermeldung an, dass der Bereich durch eine Gruppenrichtlinie festgelegt wurde und nicht geändert werden kann.

Wenn die Ausführungsrichtlinie nicht durch Gruppenrichtlinie definiert ist, wird die effektive Ausführungsrichtlinie wie folgt durch die Reihenfolge der Rangfolge bestimmt:

  • Process - Höchste Rangfolge. Der Process Bereich wirkt sich nur auf die aktuelle PowerShell-Sitzung aus. Die Ausführungsrichtlinie wird in der Umgebungsvariablen $Env:PSExecutionPolicyPreferenceund nicht in der Registrierung gespeichert. Wenn die PowerShell-Sitzung geschlossen wird, werden die Variable und der Wert gelöscht.
  • CurrentUser - Zweithöchster Rang. Die Einstellung wird in der benutzerspezifischen powershell.config.json Datei gespeichert.
  • LocalMachine - Niedrigste Rangfolge. Die Einstellung wird in der $PSHOME/powershell.config.json Datei gespeichert.

Weitere Informationen zur powershell.config.json Datei finden Sie unter about_PowerShell_Config.

Verwalten der Ausführungsrichtlinie mit PowerShell

Verwenden Sie das cmdlet Get-ExecutionPolicy, um die effektive Ausführungsrichtlinie für die aktuelle PowerShell-Sitzung abzurufen.

Der folgende Befehl ruft die effektive Ausführungsrichtlinie ab:

Get-ExecutionPolicy

So rufen Sie alle Ausführungsrichtlinien ab, die sich auf die aktuelle Sitzung auswirken, und zeigen Sie sie in Rangfolge an:

Get-ExecutionPolicy -List

Das Ergebnis sieht ähnlich wie das folgende Beispielergebnis aus.

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       AllSigned

In diesem Fall ist die effektive Ausführungsrichtlinie RemoteSigned, da die Ausführungsrichtlinie für den aktuellen Benutzer Vorrang vor der für den lokalen Computer festgelegten Ausführungsrichtlinie hat.

Verwenden Sie den Scope-Parameter von Get-ExecutionPolicy, um die Ausführungsrichtlinie für einen bestimmten Bereich abzurufen.

Der folgende Befehl ruft beispielsweise die Ausführungsrichtlinie für den CurrentUser- Bereich ab:

Get-ExecutionPolicy -Scope CurrentUser

Ändern der Ausführungsrichtlinie

Verwenden Sie das Cmdlet Set-ExecutionPolicy, um die PowerShell-Ausführungsrichtlinie auf Ihrem Windows-Computer zu ändern. Die Änderung ist sofort wirksam. PowerShell muss nicht neu gestartet werden.

Wenn Sie die Ausführungsrichtlinie für die Bereiche LocalMachine oder die CurrentUser-festlegen, wird die Änderung in der Konfigurationsdatei gespeichert und bleibt wirksam, bis Sie sie erneut ändern.

Wenn Sie die Ausführungsrichtlinie für den Process Bereich festlegen, wird sie nicht in der Konfigurationsdatei gespeichert. Die Ausführungsrichtlinie wird beibehalten, bis der aktuelle Prozess und alle untergeordneten Prozesse geschlossen werden.

Anmerkung

In Windows Vista und späteren Versionen von Windows starten Sie PowerShell mit der Option Als Administrator ausführen, um Befehle auszuführen, die die Ausführungsrichtlinie für den lokalen Computer ändern, im LocalMachine-Bereich.

So ändern Sie Ihre Ausführungsrichtlinie:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Zum Beispiel:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

So legen Sie die Ausführungsrichtlinie für einen bestimmten Bereich fest:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Zum Beispiel:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Ein Befehl zum Ändern einer Ausführungsrichtlinie kann erfolgreich sein, aber dennoch nicht die effektive Ausführungsrichtlinie ändern.

Beispielsweise kann ein Befehl, der die Ausführungsrichtlinie für den lokalen Computer festlegt, erfolgreich sein, aber von der Ausführungsrichtlinie für den aktuellen Benutzer außer Kraft gesetzt werden.

Entferne die Ausführungsrichtlinie

Um die Ausführungsrichtlinie für einen bestimmten Bereich zu entfernen, legen Sie die Ausführungsrichtlinie auf Undefinedfest.

So entfernen Sie beispielsweise die Ausführungsrichtlinie für alle Benutzer des lokalen Computers:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

So entfernen Sie die Ausführungsrichtlinie für einen Scope:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Wenn keine Ausführungsrichtlinie in einem beliebigen Bereich festgelegt ist, ist die effektive Ausführungsrichtlinie Restricted, was der Standard für Windows-Clients ist.

Festlegen einer anderen Richtlinie für eine Sitzung

Sie können den parameter ExecutionPolicy von pwsh.exe verwenden, um eine Ausführungsrichtlinie für eine neue PowerShell-Sitzung festzulegen. Die Richtlinie wirkt sich nur auf die aktuelle Sitzung und untergeordnete Sitzungen aus.

Um die Ausführungsrichtlinie für eine neue Sitzung festzulegen, starten Sie PowerShell in der Befehlszeile, z. B. cmd.exe oder über PowerShell, und verwenden Sie dann den ExecutionPolicy Parameter von pwsh.exe, um die Ausführungsrichtlinie festzulegen.

Zum Beispiel:

pwsh.exe -ExecutionPolicy AllSigned

Die von Ihnen festgelegte Ausführungsrichtlinie wird nicht in der Konfigurationsdatei gespeichert. Stattdessen wird sie in der $Env:PSExecutionPolicyPreference Umgebungsvariablen gespeichert. Die Variable wird gelöscht, wenn Sie die Sitzung schließen, in der die Richtlinie festgelegt ist. Sie können die Richtlinie nicht ändern, indem Sie den Variablenwert bearbeiten.

Während der Sitzung hat die für die Sitzung festgelegte Ausführungsrichtlinie Vorrang vor einer Ausführungsrichtlinie, die in der Konfigurationsdatei für den lokalen Computer oder den aktuellen Benutzer festgelegt ist. Sie hat jedoch keine Vorrang vor der Ausführungsrichtlinie, die mithilfe einer Gruppenrichtlinie festgelegt wurde.

Verwenden von Gruppenrichtlinien zum Verwalten der Ausführungsrichtlinie

Mit der Gruppenrichtlinien-Einstellung Skriptausführung einschalten können Sie die Ausführungsrichtlinien für Computer in Ihrem Unternehmen verwalten. Die Gruppenrichtlinieneinstellung setzt die in PowerShell festgelegten Ausführungsrichtlinien in allen Bereichen außer Kraft.

Die Richtlinieneinstellungen für Skriptausführung aktivieren sind wie folgt:

  • Wenn Sie Skriptausführung aktivieren deaktivieren, werden Skripts nicht ausgeführt. Dies entspricht der Restricted-Ausführungsrichtlinie.

  • Wenn Sie Skriptausführung aktivieren aktivieren, können Sie eine Ausführungsrichtlinie auswählen. Die Gruppenrichtlinieneinstellungen entsprechen den folgenden Richtlinieneinstellungen für die Ausführung:

    Gruppenrichtlinien Ausführungsrichtlinie
    Alle Skripts zulassen Unrestricted
    Zulassen lokaler Skripte und entfernter signierter Skripte RemoteSigned
    Nur signierte Skripts zulassen AllSigned
  • Wenn Skriptausführung aktivieren nicht konfiguriert ist, hat dies keine Auswirkung. Die in PowerShell festgelegte Ausführungsrichtlinie ist wirksam.

Die PowerShellCoreExecutionPolicy.adm Dateien und PowerShellCoreExecutionPolicy.admx die Dateien fügen die Richtlinie " Skriptausführung aktivieren" zu den Knoten "Computerkonfiguration" und "Benutzerkonfiguration" im Gruppenrichtlinien-Editor im folgenden Pfad hinzu:

Administrative Templates\Windows Components\Windows PowerShell

Im Knoten "Computerkonfiguration" festgelegte Richtlinien haben Vorrang vor richtlinien, die im Knoten "Benutzerkonfiguration" festgelegt sind.

Weitere Informationen finden Sie unter about_Group_Policy_Settings.

Verwalten signierter und nicht signierter Skripts

In Windows fügen Programme wie Internet Explorer und Microsoft Edge einen alternativen Datenstrom zu Dateien hinzu, die heruntergeladen werden. Dadurch wird die Datei als "aus dem Internet" gekennzeichnet. Wenn Ihre PowerShell-Ausführungsrichtlinie RemoteSigned-ist, führt PowerShell keine nicht signierten Skripts aus, die aus dem Internet heruntergeladen werden, einschließlich E-Mail- und Chatprogramme.

Sie können das Skript signieren oder entscheiden, ein nicht signiertes Skript auszuführen, ohne die Ausführungsrichtlinie zu ändern.

Ab PowerShell 3.0 können Sie den parameter Stream des Cmdlets Get-Item verwenden, um Dateien zu erkennen, die blockiert werden, da sie aus dem Internet heruntergeladen wurden. Verwenden Sie das Cmdlet Unblock-File, um die Blockierung der Skripts aufzuheben, damit Sie sie in PowerShell ausführen können.

Weitere Informationen finden Sie unter about_Signing, Get-Item, and Unblock-File.

Anmerkung

Andere Methoden zum Herunterladen von Dateien markieren die Dateien möglicherweise nicht als aus der Internetzone stammend. Einige Beispiele sind:

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Ausführungsrichtlinie unter Windows Server Core und Windows Nano Server

Wenn PowerShell 6 unter bestimmten Bedingungen unter Windows Server Core oder Windows Nano Server ausgeführt wird, können Ausführungsrichtlinien mit dem folgenden Fehler fehlschlagen:

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell verwendet APIs in der Windows-Desktopshell (explorer.exe), um die Zone einer Skriptdatei zu überprüfen. Die Windows Shell ist auf Windows Server Core und Windows Nano Server nicht verfügbar.

Sie können diesen Fehler auch auf einem beliebigen Windows-System erhalten, wenn die Windows-Desktopshell nicht verfügbar oder nicht reagiert. Beispielsweise könnte ein PowerShell-Anmeldeskript während der Anmeldung die Ausführung starten, bevor der Windows-Desktop bereit ist, was zu einem Fehler führt.

Die Verwendung einer Ausführungsrichtlinie von ByPass oder AllSigned erfordert keine Zonenüberprüfung, die das Problem verhindert.

Siehe auch