about_Execution_Policies

Kurze Beschreibung

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 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 beschränkt. Benutzer können beispielsweise eine Richtlinie einfach umgehen, indem Sie den Skriptinhalt in die Befehlszeile eingeben, wenn sie kein Skript ausführen können. Stattdessen hilft die Ausführungsrichtlinie Benutzern, grundlegende Regeln festzulegen und zu verhindern, dass sie versehentlich verletzt werden.

Auf Nicht-Windows-Computern ist Unrestricted die Standardausführungsrichtlinie und kann nicht geändert werden. Das Set-ExecutionPolicy Cmdlet ist verfügbar, aber PowerShell zeigt eine Konsolennachricht an, die nicht unterstützt wird. Während sie Get-ExecutionPolicy auf nicht Windows-Plattformen zurückgegeben Unrestricted werden, stimmt Bypass das Verhalten wirklich überein, da diese Plattformen die Windows-Sicherheit Zonen nicht implementieren.

PowerShell-Ausführungsrichtlinien

Die Durchsetzung dieser Richtlinien tritt nur auf Windows-Plattformen auf. 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 sind, einschließlich Skripts, die auf dem lokalen Computer geschrieben werden.
  • Fordert Sie auf, bevor Sie Skripts aus Herausgebern ausführen, die Sie noch nicht als vertrauenswürdig oder nicht vertrauenswürdig klassifiziert haben.
  • Risiken, die signiert, aber böswillig sind.

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 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.
  • Restricted für Windows-Clients.
  • RemoteSigned für Windows-Server.

RemoteSigned

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

Restricted

  • Die Standardausführungsrichtlinie für Windows-Clientcomputer.
  • Ermöglicht einzelne Befehle, aber keine Skripts.
  • Verhindert die Ausführung aller Skriptdateien, einschließlich Formatierungs- und Konfigurationsdateien (), Modulskriptdateien () und PowerShell-Profile (.ps1xml.psm1.ps1).

Undefined

  • Es gibt keine Ausführungsrichtlinie im aktuellen Bereich.
  • Wenn die Ausführungsrichtlinie in allen Bereichen lautet, ist UndefinedRestricted die effektive Ausführungsrichtlinie für Windows-Clients 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 ein Risiko, böswillige Skripts auszuführen.
  • Warnt den Benutzer vor dem Ausführen von Skripts und Konfigurationsdateien, die nicht aus der lokalen Intranetzone stammen.

Hinweis

Auf Systemen, die keine Universelle Benennungskonvention (UNC)-Pfade von Internetpfaden unterscheiden, können Skripts, die von einem UNC-Pfad identifiziert werden, möglicherweise nicht mit der RemoteSigned-Ausführungsrichtlinie ausgeführt werden.

Ausführungsrichtlinienbereich

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

Die gültigen Werte Scope sind , MachinePolicyUserPolicy, ProcessCurrentUser 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 niedrigerer Ebene der Rangfolge festgelegt wurde.

Weitere Informationen finden Sie unter Set-ExecutionPolicy.

MachinePolicy

Legen Sie einen Gruppenrichtlinie für alle Benutzer des Computers fest.

UserPolicy

Legen Sie einen Gruppenrichtlinie für den aktuellen Benutzer des Computers fest.

Process

Der Process Bereich wirkt sich nur auf die aktuelle PowerShell-Sitzung aus. Die Ausführungsrichtlinie wird in der Umgebungsvariable $env:PSExecutionPolicyPreferenceund 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. Es wird im HKEY_CURRENT_USER Registrierungsunterschlüssel gespeichert.

LocalMachine

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

Verwalten der Ausführungsrichtlinie mit PowerShell

Um die effektive Ausführungsrichtlinie für die aktuelle PowerShell-Sitzung abzurufen, verwenden Sie das Get-ExecutionPolicy Cmdlet.

Der folgende Befehl ruft die effektive Ausführungsrichtlinie ab:

Get-ExecutionPolicy

Um alle Ausführungsrichtlinien abzurufen, die sich auf die aktuelle Sitzung auswirken und sie in Der Rangfolge anzeigen möchten:

Get-ExecutionPolicy -List

Das Ergebnis sieht ähnlich 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 für den lokalen Computer hat.

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

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

Get-ExecutionPolicy -Scope CurrentUser

Ändern der Ausführungsrichtlinie

Um die PowerShell-Ausführungsrichtlinie auf Ihrem Windows-Computer zu ändern, verwenden Sie das Set-ExecutionPolicy Cmdlet. Die Änderung ist sofort wirksam. Sie müssen PowerShell nicht neu starten.

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 es erneut ändern.

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

Hinweis

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

So ändern Sie Ihre Ausführungsrichtlinie:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Zum Beispiel:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

So legen Sie die Ausführungsrichtlinie in einem 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 durch die Ausführungsrichtlinie für den aktuellen Benutzer außer Kraft gesetzt werden.

Entfernen der Ausführungsrichtlinie

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

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 beliebigen Bereich festgelegt ist, lautet Restricteddie effektive Ausführungsrichtlinie , die die Standardeinstellung für Windows-Clients ist.

Festlegen einer anderen Richtlinie für eine Sitzung

Sie können den ExecutionPolicy-Parameterpwsh.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, zcmd.exe. B. von PowerShell, und verwenden Sie dann den ExecutionPolicy-Parameterpwsh.exe, um die Ausführungsrichtlinie festzulegen.

Zum Beispiel:

pwsh.exe -ExecutionPolicy AllSigned

Die von Ihnen festgelegte Ausführungsrichtlinie wird nicht in der Registrierung gespeichert. Stattdessen wird sie in der $env:PSExecutionPolicyPreference Umgebungsvariable 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 Registrierung 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 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 einstellung Gruppenrichtlinie überschreibt die in PowerShell festgelegten Ausführungsrichtlinien in allen Bereichen.

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

  • Wenn Sie die Ausführung von Skripts deaktivieren, werden Skripts nicht ausgeführt. Dies entspricht der Restricted Ausführungsrichtlinie.

  • Wenn Sie die Skriptausführung aktivieren, können Sie eine Ausführungsrichtlinie auswählen. Die einstellungen Gruppenrichtlinie entsprechen den folgenden Ausführungsrichtlinieneinstellungen:

    Gruppenrichtlinie Ausführungsrichtlinie
    Alle Skripts zulassen Unrestricted
    Zulassen lokaler Skripts und remote signierter Skripts RemoteSigned
    Nur signierte Skripts zulassen AllSigned
  • Wenn die Skriptausführung nicht konfiguriert ist, hat sie keine Auswirkung. Die In PowerShell festgelegte Ausführungsrichtlinie ist wirksam.

Die PowerShellExecutionPolicy.adm- und PowerShellExecutionPolicy.admx-Dateien fügen die Richtlinie "Skriptausführung aktivieren" den Knoten "Computerkonfiguration" und "Benutzerkonfiguration" in 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 höhere Versionen von Windows:

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

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

Weitere Informationen finden Sie unter about_Group_Policy_Settings.

Rangfolge der Ausführungsrichtlinie

Wenn Sie die effektive Ausführungsrichtlinie für eine Sitzung ermitteln, 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

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 Stream-Parameter des Get-Item Cmdlets verwenden, um Dateien zu erkennen, die blockiert sind, da sie aus dem Internet heruntergeladen wurden. Verwenden Sie das Unblock-File Cmdlet, um die Blockierung der Skripts zu aufheben, damit Sie sie in PowerShell ausführen können.

Weitere Informationen finden Sie unter about_Signing, Get-Item und 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 Window Nano Server

Wenn PowerShell 6 unter bestimmten Bedingungen auf 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) zum Überprüfen der Zone einer Skriptdatei. 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-Desktopshell nicht verfügbar oder nicht reagiert. Bei der Anmeldung kann beispielsweise ein PowerShell-Anmeldeskript 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