Set-ExecutionPolicy
Legt die PowerShell-Ausführungsrichtlinien für Windows-Computer fest.
Syntax
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Das Set-ExecutionPolicy
Cmdlet ändert PowerShell-Ausführungsrichtlinien für Windows-Computer. Weitere Informationen finden Sie unter about_Execution_Policies.
Ab PowerShell 6.0 für Nicht-Windows-Computer ist Unrestricted
die Standardausführungsrichtlinie 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.
Eine Ausführungsrichtlinie ist Teil der PowerShell-Sicherheitsstrategie. Ausführungsrichtlinien bestimmen, ob Sie Konfigurationsdateien wie Ihr PowerShell-Profil laden oder Skripts ausführen können. Und gibt an, ob Skripts vor der Ausführung digital signiert werden müssen.
Der Set-ExecutionPolicy
Standardbereich des Cmdlets ist LocalMachine
, was sich auf alle Benutzer des Computers auswirkt. Um die Ausführungsrichtlinie für LocalMachine
zu ändern, starten Sie PowerShell mit Als Administrator ausführen.
Verwenden Get-ExecutionPolicy -List
Sie zum Anzeigen der Ausführungsrichtlinien für jeden Bereich . Verwenden Sie zum Anzeigen der effektiven Ausführungsrichtlinie für Ihre PowerShell-Sitzung Get-ExecutionPolicy
ohne Parameter.
Beispiele
Beispiel 1: Festlegen einer Ausführungsrichtlinie
In diesem Beispiel wird gezeigt, wie die Ausführungsrichtlinie für den lokalen Computer festgelegt wird.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Das Set-ExecutionPolicy
Cmdlet verwendet den ExecutionPolicy-Parameter , um die RemoteSigned
Richtlinie anzugeben. Der Scope-Parameter gibt den Standardwert für den Bereich an LocalMachine
. Verwenden Sie zum Anzeigen der Ausführungsrichtlinieneinstellungen das Get-ExecutionPolicy
Cmdlet mit dem List-Parameter .
Beispiel 2: Festlegen einer Ausführungsrichtlinie, die in Konflikt mit einem Gruppenrichtlinie
Mit diesem Befehl wird versucht, die LocalMachine
Ausführungsrichtlinie des Bereichs auf Restricted
festzulegen.
LocalMachine
ist restriktiver, ist aber nicht die effektive Richtlinie, da sie mit einer Gruppenrichtlinie in Konflikt steht. Die Restricted
Richtlinie wird in die Registrierungsstruktur HKEY_LOCAL_MACHINE
geschrieben.
PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine
Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted
PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds
Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
Name Property
---- --------
Microsoft.PowerShell Path : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
ExecutionPolicy : Restricted
ScriptedDiagnostics ExecutionPolicy : Unrestricted
Das Set-ExecutionPolicy
Cmdlet verwendet den ExecutionPolicy-Parameter , um die Restricted
Richtlinie anzugeben. Der Scope-Parameter gibt den Standardwert für den Bereich an LocalMachine
. Das Get-ChildItem
Cmdlet verwendet den Path-Parameter mit dem Laufwerk, um den HKLM:
Registrierungsspeicherort anzugeben.
Beispiel 3: Anwenden der Ausführungsrichtlinie von einem Remotecomputer auf einen lokalen Computer
Dieser Befehl ruft das Ausführungsrichtlinienobjekt von einem Remotecomputer ab und legt die Richtlinie auf dem lokalen Computer fest. Get-ExecutionPolicy
sendet ein Microsoft.PowerShell.ExecutionPolicy-Objekt über die Pipeline. Set-ExecutionPolicy
akzeptiert pipelineeingaben und erfordert keinen ExecutionPolicy-Parameter .
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
Das Invoke-Command
Cmdlet wird auf dem lokalen Computer ausgeführt und sendet den ScriptBlock an den Remotecomputer. Der ComputerName-Parameter gibt den Remotecomputer Server01 an. Der ScriptBlock-Parameter wird auf dem Remotecomputer ausgeführt Get-ExecutionPolicy
. Das Get-ExecutionPolicy
-Objekt wird an die Pipeline Set-ExecutionPolicy
gesendet.
Set-ExecutionPolicy
wendet die Ausführungsrichtlinie auf den Standardbereich des lokalen Computers an. LocalMachine
Beispiel 4: Festlegen des Bereichs für eine Ausführungsrichtlinie
In diesem Beispiel wird gezeigt, wie Sie eine Ausführungsrichtlinie für einen angegebenen Bereich festlegen, CurrentUser
. Der CurrentUser
Bereich wirkt sich nur auf den Benutzer aus, der diesen Bereich festlegt.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser AllSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy
verwendet den ExecutionPolicy-Parameter , um die AllSigned
Richtlinie anzugeben.
Der Scope-Parameter gibt den CurrentUser
an. Verwenden Sie zum Anzeigen der Ausführungsrichtlinieneinstellungen das Get-ExecutionPolicy
Cmdlet mit dem List-Parameter .
Die effektive Ausführungsrichtlinie für den Benutzer wird .AllSigned
Beispiel 5: Entfernen der Ausführungsrichtlinie für den aktuellen Benutzer
In diesem Beispiel wird gezeigt, wie die Ausführungsrichtlinie Undefined
verwendet wird, um eine Ausführungsrichtlinie für einen angegebenen Bereich zu entfernen.
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Set-ExecutionPolicy
verwendet den ExecutionPolicy-Parameter , um die Undefined
Richtlinie anzugeben. Der Scope-Parameter gibt den CurrentUser
an. Verwenden Sie zum Anzeigen der Ausführungsrichtlinieneinstellungen das Get-ExecutionPolicy
Cmdlet mit dem List-Parameter .
Beispiel 6: Festlegen der Ausführungsrichtlinie für die aktuelle PowerShell-Sitzung
Der Process
Bereich wirkt sich nur auf die aktuelle PowerShell-Sitzung aus. Die Ausführungsrichtlinie wird in der Umgebungsvariablen $env:PSExecutionPolicyPreference
gespeichert und beim Schließen der Sitzung gelöscht.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process AllSigned
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Der Set-ExecutionPolicy
verwendet den ExecutionPolicy-Parameter , um die AllSigned
Richtlinie anzugeben. Der Scope-Parameter gibt den Wert Process
an. Verwenden Sie zum Anzeigen der Ausführungsrichtlinieneinstellungen das Get-ExecutionPolicy
Cmdlet mit dem List-Parameter .
Beispiel 7: Aufheben der Blockierung eines Skripts, um es auszuführen, ohne die Ausführungsrichtlinie zu ändern
Dieses Beispiel zeigt, wie die Ausführungsrichtlinie RemoteSigned
verhindert, dass Sie nicht signierte Skripts ausführen.
Eine bewährte Methode besteht darin, den Code des Skripts zu lesen und zu überprüfen, ob er sicher ist , bevor Sie das Unblock-File
Cmdlet verwenden. Das Unblock-File
Cmdlet hebt die Blockierung von Skripts auf, damit sie ausgeführt werden können, ändert aber die Ausführungsrichtlinie nicht.
PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
PS> Get-ExecutionPolicy
RemoteSigned
PS> .\Start-ActivityTracker.ps1
.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS> Unblock-File -Path .\Start-ActivityTracker.ps1
PS> Get-ExecutionPolicy
RemoteSigned
PS> .\Start-ActivityTracker.ps1
Task 1:
Der Set-ExecutionPolicy
verwendet den ExecutionPolicy-Parameter , um die RemoteSigned
Richtlinie anzugeben. Die Richtlinie ist für den Standardbereich festgelegt. LocalMachine
Das Get-ExecutionPolicy
Cmdlet zeigt, dass es RemoteSigned
sich um die effektive Ausführungsrichtlinie für die aktuelle PowerShell-Sitzung handelt.
" Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by
RemoteSigned", weil das Skript nicht digital signiert ist.
In diesem Beispiel wurde der Code des Skripts überprüft und als sicher ausgeführt überprüft. Das Unblock-File
Cmdlet verwendet den Path-Parameter , um die Blockierung des Skripts aufzuheben.
Um zu überprüfen, ob Unblock-File
die Ausführungsrichtlinie nicht geändert wurde, Get-ExecutionPolicy
zeigt die effektive Ausführungsrichtlinie an. RemoteSigned
Das Skript Start-ActivityTracker.ps1
wird aus dem aktuellen Verzeichnis ausgeführt. Das Skript beginnt mit der Ausführung, da es vom Unblock-File
Cmdlet aufgehoben wurde.
Parameter
-Confirm
Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ExecutionPolicy
Gibt die Ausführungsrichtlinie an. Wenn keine Gruppenrichtlinien vorhanden sind und die Ausführungsrichtlinie jedes Bereichs auf Undefined
festgelegt ist, wird die Restricted
effektive Richtlinie für alle Benutzer.
Die zulässigen Ausführungsrichtlinienwerte sind wie folgt:
AllSigned
. Erfordert, dass alle Skripts und Konfigurationsdateien von einem vertrauenswürdigen Herausgeber signiert werden, einschließlich skripts, die auf dem lokalen Computer geschrieben wurden.Bypass
. Es findet keine Blockierung statt und es werden keine Warnungen oder Eingabeaufforderungen ausgegeben.Default
. Legt die Standardausführungsrichtlinie fest.Restricted
für Windows-Clients oderRemoteSigned
für Windows-Server.RemoteSigned
. Erfordert, dass alle Skripts und Konfigurationsdateien, die aus dem Internet heruntergeladen werden, von einem vertrauenswürdigen Herausgeber signiert werden. Die Standardausführungsrichtlinie für Windows-Servercomputer.Restricted
. Lädt keine Konfigurationsdateien und führt keine Skripts aus. Die Standardausführungsrichtlinie für Windows-Clientcomputer.Undefined
. Für den Bereich ist keine Ausführungsrichtlinie festgelegt. Entfernt eine zugewiesene Ausführungsrichtlinie aus einem Bereich, der nicht von einem Gruppenrichtlinie festgelegt wird. Wenn die Ausführungsrichtlinie in allen Bereichen lautet, lautetUndefined
Restricted
die effektive Ausführungsrichtlinie .Unrestricted
. Ab PowerShell 6.0 ist dies die Standardausführungsrichtlinie für Nicht-Windows-Computer und kann nicht geändert werden. Lädt alle Konfigurationsdateien und führt alle Skripts aus. Wenn Sie ein nicht signiertes Skript ausführen, das aus dem Internet heruntergeladen wurde, werden Sie vor der Ausführung zur Berechtigung aufgefordert.
Type: | ExecutionPolicy |
Accepted values: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Unterdrückt alle Bestätigungsaufforderungen. Gehen Sie mit diesem Parameter vorsichtig vor, um unerwartete Ergebnisse zu vermeiden.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Scope
Gibt den Bereich an, der von einer Ausführungsrichtlinie betroffen ist. Der Standardbereich ist LocalMachine
.
Die effektive Ausführungsrichtlinie wird wie folgt durch die Rangfolge bestimmt:
MachinePolicy
– Durch eine Gruppenrichtlinie für alle Benutzer des Computers festgelegtUserPolicy
– Von einem Gruppenrichtlinie für den aktuellen Benutzer des Computers festgelegtProcess
– Wirkt sich nur auf die aktuelle PowerShell-Sitzung aus.LocalMachine
– Standardbereich, der sich auf alle Benutzer des Computers auswirktCurrentUser
– Betrifft nur den aktuellen Benutzer.
Der Process
Bereich wirkt sich nur auf die aktuelle PowerShell-Sitzung aus. Die Ausführungsrichtlinie wird nicht in der Registrierung, sondern in der Umgebungsvariable $env:PSExecutionPolicyPreference
gespeichert. Wenn die PowerShell-Sitzung geschlossen wird, werden die Variable und der Wert gelöscht.
Ausführungsrichtlinien für den CurrentUser
Bereich werden in die Registrierungsstruktur HKEY_LOCAL_USER
geschrieben.
Ausführungsrichtlinien für den LocalMachine
Bereich werden in die Registrierungsstruktur HKEY_LOCAL_MACHINE
geschrieben.
Type: | ExecutionPolicyScope |
Accepted values: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Position: | 1 |
Default value: | LocalMachine |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-WhatIf
Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können ein Ausführungsrichtlinienobjekt an dieses Cmdlet weiterleiten.
Sie können eine Zeichenfolge, die den Namen einer Ausführungsrichtlinie enthält, an dieses Cmdlet weiterleiten.
Ausgaben
None
Dieses Cmdlet gibt keine Ausgabe zurück.
Hinweise
Set-ExecutionPolicy
ändert MachinePolicy
die Bereiche und UserPolicy
nicht, da sie durch Gruppenrichtlinien festgelegt werden.
Set-ExecutionPolicy
überschreibt keine Gruppenrichtlinie, auch wenn die Benutzereinstellung restriktiver als die Richtlinie ist.
Wenn die Gruppenrichtlinie Aktivieren der Skriptausführung für den Computer oder Benutzer aktiviert ist, wird die Benutzereinstellung gespeichert, aber nicht wirksam. PowerShell zeigt eine Meldung an, die den Konflikt erklärt.