about_Execution_Policies

Kurze Beschreibung

Beschreibt die PowerShell-Ausführungsrichtlinien und erläutert deren Verwaltung.

Lange Beschreibung

Die Ausführungsrichtlinie von PowerShell ist ein Sicherheitsfeature, das die Bedingungen steuert, unter denen PowerShell Konfigurationsdateien lädt und Skripts ausgeführt. Dieses Feature hilft, die Ausführung schädlicher 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 der Registrierung 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 kein Sicherheitssystem, das Benutzeraktionen einschränkt. Beispielsweise können Benutzer eine Richtlinie problemlos umgehen, indem sie den Skriptinhalt an der Befehlszeile eingeben, wenn sie kein Skript ausführen können. Stattdessen hilft die Ausführungsrichtlinie Benutzern beim Festlegen grundlegender Regeln und verhindert, dass sie unbeabsichtigt gegen sie verstoßen.

Auf Nicht-Windows-Computern ist die Standardausführungsrichtlinie Unrestricted und kann nicht geändert werden. Das Set-ExecutionPolicy Cmdlet ist verfügbar, aber PowerShell zeigt eine Konsolenmeldung an, dass es nicht unterstützt wird. Auch Get-ExecutionPolicy wenn Unrestricted auf Nicht-Windows-Plattformen zurückgegeben wird, stimmt das Verhalten tatsächlich zu, da diese Plattformen die Windows-Sicherheit Bypass implementieren.

PowerShell-Ausführungsrichtlinien

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

AllSigned

  • Skripts können ausgeführt werden.
  • Erfordert, dass alle Skripts und Konfigurationsdateien von einem vertrauenswürdigen Herausgeber signiert sind, einschließlich Skripts, die auf dem lokalen Computer geschrieben werden.
  • Fordert Sie auf, Skripts von Herausgebern auszuführen, die Sie noch nicht als vertrauenswürdig oder nicht vertrauenswürdig klassifiziert haben.
  • Risiken beim Ausführen signierter, aber böswilliger Skripts.

Bypass

  • Es findet keine Blockierung statt und es werden keine Warnungen oder Eingabeaufforderungen ausgegeben.
  • Diese Ausführungsrichtlinie ist für Konfigurationen konzipiert, in denen ein PowerShell-Skript in eine größere Anwendung integriert ist, oder für Konfigurationen, in denen PowerShell die Grundlage für ein Programm mit einem eigenen Sicherheitsmodell ist.

Default

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

RemoteSigned

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

Restricted

  • Die Standardausführungsrichtlinie für Windows-Clientcomputer.
  • Erlaubt einzelne Befehle, aber keine Skripts.
  • 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 Geltungsbereichen ist, gilt die effektive Ausführungsrichtlinie für Windows-Clients und Undefined Restricted 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, dass schädliche Skripts ausgeführt werden.
  • Warnt den Benutzer vor dem Ausführen von Skripts und Konfigurationsdateien, die nicht aus der lokalen Intranetzone entfernt sind.

Hinweis

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

Bereich der Ausführungsrichtlinie

Sie können eine Ausführungsrichtlinie festlegen, die nur in einem bestimmten Bereich wirksam ist.

Die gültigen Werte Scope für MachinePolicy sind , UserPolicy Process , , CurrentUser und LocalMachine. LocalMachine ist die Standardeinstellung beim Festlegen einer Ausführungsrichtlinie.

Die Scope Werte werden in der Rangfolge aufgeführt. Die Richtlinie, die Vorrang hat, ist in der aktuellen Sitzung wirksam, auch wenn eine restriktivere Richtlinie auf einer niedrigeren Rangfolgeebene festgelegt wurde.

Weitere Informationen finden Sie unter Set-ExecutionPolicy.

MachinePolicy

Wird durch eine Gruppenrichtlinie für alle Benutzer des Computers festgelegt.

UserPolicy

Wird von einem Gruppenrichtlinie für den aktuellen Benutzer des Computers festgelegt.

Process

Der Process Bereich wirkt sich nur auf die aktuelle PowerShell-Sitzung aus. Die Ausführungsrichtlinie wird in der Umgebungsvariablen $env:PSExecutionPolicyPreference und nicht in der Registrierung gespeichert. Wenn die PowerShell-Sitzung geschlossen wird, werden die Variable und der Wert gelöscht.

CurrentUser

Die Ausführungsrichtlinie wirkt sich nur auf den aktuellen Benutzer aus. Sie wird im unteren HKEY_CURRENT_USER der Registrierung gespeichert.

LocalMachine

Die Ausführungsrichtlinie wirkt sich auf alle Benutzer auf dem aktuellen Computer aus. Sie wird im registrierungsunterschlüssel HKEY_LOCAL_MACHINE gespeichert.

Verwalten der Ausführungsrichtlinie mit PowerShell

Verwenden Sie das Cmdlet , um die effektive Ausführungsrichtlinie für die aktuelle PowerShell-Sitzung Get-ExecutionPolicy zu erhalten.

Der folgende Befehl ruft die effektive Ausführungsrichtlinie ab:

Get-ExecutionPolicy

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

Get-ExecutionPolicy -List

Das Ergebnis sieht in etwa wie die folgende Beispielausgabe 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 Ausführungsrichtlinie hat, die für den lokalen Computer festgelegt ist.

Um die Ausführungsrichtlinie für einen bestimmten Bereich zu erhalten, verwenden Sie Scope den -Parameter von Get-ExecutionPolicy .

Beispielsweise ruft der folgende Befehl die Ausführungsrichtlinie für den Bereich CurrentUser ab:

Get-ExecutionPolicy -Scope CurrentUser

Ändern der Ausführungsrichtlinie

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

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

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

Hinweis

Starten Sie PowerShell in Windows Vista und höher mit der Option Als Administrator ausführen, um Befehle auszuführen, die die Ausführungsrichtlinie für den lokalen Computer (LocalMachine-Bereich) ändern.

So ändern Sie Ihre Ausführungsrichtlinie:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Beispiel:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

So legen Sie die Ausführungsrichtlinie in einem bestimmten Bereich fest:

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

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 legt, erfolgreich sein, aber von der Ausführungsrichtlinie für den aktuellen Benutzer überschrieben werden.

Entfernen der Ausführungsrichtlinie

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

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 eine Scope :

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Wenn keine Ausführungsrichtlinie in einem Bereich festgelegt ist, ist die effektive Ausführungsrichtlinie . Dies ist Restricted die Standardeinstellung für Windows-Clients.

Festlegen einer anderen Richtlinie für eine Sitzung

Mit dem ExecutionPolicy-Parameter von pwsh.exe können Sie eine Ausführungsrichtlinie für eine neue PowerShell-Sitzung festlegen. Die Richtlinie wirkt sich nur auf die aktuelle Sitzung und untergeordnete Sitzungen aus.

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

Beispiel:

pwsh.exe -ExecutionPolicy AllSigned

Die von Ihnen festgelegte Ausführungsrichtlinie wird nicht in der Registrierung gespeichert. Stattdessen wird es 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 Ausführungsrichtlinie, die für die Sitzung festgelegt wird, Vorrang vor einer Ausführungsrichtlinie, die in der Registrierung für den lokalen Computer oder den aktuellen Benutzer festgelegt ist. Sie hat jedoch keinen Vorrang vor der Ausführungsrichtlinie, die mithilfe eines -Gruppenrichtlinie.

Verwenden Gruppenrichtlinie zum Verwalten der Ausführungsrichtlinie

Sie können die Einstellung Skriptausführung aktivieren Gruppenrichtlinie verwenden, um die Ausführungsrichtlinie von Computern in Ihrem Unternehmen zu verwalten. Die Gruppenrichtlinie überschreibt die ausführungsrichtlinien, die in PowerShell in allen Geltungsbereichen festgelegt sind.

Die Richtlinieneinstellungen Skriptausführung aktivieren lauten 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 Gruppenrichtlinie entsprechen den folgenden Ausführungsrichtlinieeinstellungen:

    Gruppenrichtlinie Ausführungsrichtlinie
    Alle Skripts zulassen Unrestricted
    Lokale Skripts und remote signierte Skripts zulassen RemoteSigned
    Nur signierte Skripts zulassen AllSigned
  • Wenn Skriptausführung aktivieren nicht konfiguriert ist, hat dies keine Auswirkungen. Die in PowerShell festgelegte Ausführungsrichtlinie ist wirksam.

Die Dateien PowerShellExecutionPolicy.adm und PowerShellExecutionPolicy.admx fügen die Richtlinie Skriptausführung aktivieren den Knoten Computerkonfiguration und Benutzerkonfiguration im Gruppenrichtlinie-Editor in den folgenden Pfaden hinzu.

Für Windows XP und Windows Server 2003:

Administrative Templates\Windows Components\Windows PowerShell

Für Windows Vista und neuere Versionen von Windows:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

Richtlinien, die im Knoten Computerkonfiguration festgelegt werden, haben Vorrang vor Richtlinien, die im Knoten Benutzerkonfiguration festgelegt wurden.

Weitere Informationen finden Sie unter about_Group_Policy_Settings.

Rangfolge der Ausführungsrichtlinie

Beim Bestimmen der effektiven Ausführungsrichtlinie für eine Sitzung wertet PowerShell die Ausführungsrichtlinien in der folgenden Rangfolge aus:

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: CurrentUser
Execution Policy: LocalMachine

Verwalten signierter und nicht signierter Skripts

Unter Windows fügen Programme wie Internet Explorer und Microsoft Edge dateien, die heruntergeladen werden, einen alternativen Datenstrom hinzu. Dadurch wird die Datei als "aus dem Internet" markiert. Wenn Ihre PowerShell-Ausführungsrichtlinie RemoteSigned ist, werden von PowerShell keine nicht signierten Skripts ausgeführt, die aus dem Internet heruntergeladen werden, einschließlich E-Mail- und Instant Messaging-Programmen.

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

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

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

Hinweis

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

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

Ausführungsrichtlinie für 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 Desktop Shell ( ), um die explorer.exe Zone einer Skriptdatei zu überprüfen. Die Windows-Shell ist unter Windows Server Core und Windows Nano Server nicht verfügbar.

Sie können diesen Fehler auch auf jedem Windows-System erhalten, wenn die Windows Desktop Shell nicht verfügbar ist oder nicht reagiert. Beispielsweise könnte während der Anmeldung die Ausführung eines PowerShell-Anmeldeskripts gestartet werden, bevor Windows Desktop bereit ist, was zu einem Fehler führt.

Die Verwendung einer Ausführungsrichtlinie von ByPass oder AllSigned erfordert keine Zonenüberprüfung, um das Problem zu vermeiden.

Weitere Informationen

about_Environment_Variables

about_Group_Policy_Settings

about_Signing

Get-ExecutionPolicy

Get-Item

about_Pwsh

Set-ExecutionPolicy

Unblock-File