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 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 kein Sicherheitssystem, das Benutzeraktionen einschränkt. Benutzer können beispielsweise ganz einfach bypass eine Richtlinie erstellen, 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 unbeabsichtigt verletzt werden.
Auf Nicht-Windows-Computern ist Unrestricted die Ausführungsrichtlinie default 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. 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 sind, einschließlich Skripts, die auf dem lokalen Computer geschrieben werden.
- Fordert Sie auf, bevor Sie Skripts von Herausgebern ausführen, die Sie noch nicht als vertrauenswürdig oder nicht vertrauenswürdig klassifiziert haben.
- Risiken, die signierte, aber böswillige Skripts ausführen.
Bypass
- Es findet keine Blockierung statt und es werden keine Warnungen oder Eingabeaufforderungen ausgegeben.
- 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 Ausführungsrichtlinie default fest.
- Restricted für Windows-Clients.
- RemoteSigned für Windows-Server.
RemoteSigned
- Die Ausführungsrichtlinie default für Windows-Servercomputer.
- 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 die Skripts aufgehoben werden, z. B. mithilfe des
Unblock-File
Cmdlets. - Risiken beim Ausführen von nicht signierten Skripts aus anderen Quellen als dem Internet und signierten Skripts, die böswillig sein könnten.
Restricted
- Die Ausführungsrichtlinie default für Windows-Clientcomputer.
- 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 scopeBereich ist keine Ausführungsrichtlinie festgelegt.
- Wenn die Ausführungsrichtlinie in allen Bereichen lautet, gilt UndefinedRestricted die effektive Ausführungsrichtlinie für Windows-Clients und RemoteSigned für Windows Server.
Unrestricted
- Die Ausführungsrichtlinie default 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.
Hinweis
In 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ührungsrichtlinie scope
Sie können eine Ausführungsrichtlinie festlegen, die nur in einer bestimmten scope.
Die gültigen Werte sind MachinePolicyScope " UserPolicy", Process"CurrentUser" und "LocalMachine". LocalMachine ist das default 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 Rangebene festgelegt wurde.
Weitere Informationen finden Sie unter Set-ExecutionPolicy.
MachinePolicy
Festgelegt durch eine Gruppenrichtlinie für alle Benutzer des Computers.
UserPolicy
Festgelegt durch eine Gruppenrichtlinie für den aktuellen Benutzer des Computers.
Process
Dies Processscope betrifft nur die aktuelle PowerShell-Sitzung. Die Ausführungsrichtlinie wird in der Umgebungsvariable
$env:PSExecutionPolicyPreference
anstelle der Konfigurationsdatei 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 in der CurrentUser-Konfigurationsdatei gespeichert.
LocalMachine
Die Ausführungsrichtlinie wirkt sich auf alle Benutzer auf dem aktuellen Computer aus. Sie wird in der AllUsers-Konfigurationsdatei gespeichert.
Verwalten der Ausführungsrichtlinie mit PowerShell
Verwenden Sie das Get-ExecutionPolicy
Cmdlet, 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 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 für den lokalen Computer festgelegten Ausführungsrichtlinie hat.
Verwenden Sie zum Abrufen der Ausführungsrichtlinie, die für einen bestimmten scopeSatz festgelegt ist, den Scope Parameter von Get-ExecutionPolicy
.
Der folgende Befehl ruft beispielsweise die Ausführungsrichtlinie für " CurrentUserscope" ab:
Get-ExecutionPolicy -Scope CurrentUser
Ändern der Ausführungsrichtlinie
Verwenden Sie das Set-ExecutionPolicy
Cmdlet, um die PowerShell-Ausführungsrichtlinie auf Ihrem Windows-Computer 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 Konfigurationsdatei gespeichert und bleibt wirksam, bis Sie sie erneut ändern.
Wenn Sie die Ausführungsrichtlinie für die ProcessscopeDatei festlegen, wird sie nicht in der Konfigurationsdatei gespeichert. Die Ausführungsrichtlinie wird beibehalten, bis die aktuellen und untergeordneten process Prozesse geschlossen werden.
Hinweis
Wenn Sie in Windows Vista und höheren Versionen von Windows Befehle ausführen möchten, die die Ausführungsrichtlinie für den lokalen Computer ändern, starten Siescope 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 einer bestimmten scope:
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.
Entfernen der Ausführungsrichtlinie
Wenn Sie die Ausführungsrichtlinie für eine bestimmte scopeRichtlinie entfernen möchten, 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 ein Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Wenn keine Ausführungsrichtlinie festgelegt scopeist, lautet Restricteddie effektive Ausführungsrichtlinie die default für Windows-Clients.
Festlegen einer anderen Richtlinie für eine Sitzung
Sie können den ExecutionPolicy-Parameter 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, zcmd.exe
. B. über 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 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 Gruppenrichtlinie zum Verwalten der Ausführungsrichtlinie
Sie können mithilfe der Einstellung Gruppenrichtlinie für Skriptausführung aktivieren die Ausführungsrichtlinie von Computern 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 Ausführungsrichtlinieneinstellungen:
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 Auswirkung. Die in PowerShell festgelegte Ausführungsrichtlinie ist wirksam.
Die Dateien PowerShellExecutionPolicy.adm und PowerShellExecutionPolicy.admx fügen die Richtlinie Skriptausführung aktivieren zu den Knoten „Computerkonfiguration“ und „Benutzerkonfiguration“ im Gruppenrichtlinien-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
Beim Ermitteln 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: LocalMachine
Execution Policy: CurrentUser
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 aufzuheben, 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 möglicherweise nicht die Dateien als aus der Internetzone. Beispiele hierfür 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 unter 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 "AllSigned" erfordert keine Zonenüberprüfung, die das Problem verhindert.