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 die Standardausführungsrichtlinie uneingeschränkt und kann nicht geändert werden. Das Set-ExecutionPolicy Cmdlet ist verfügbar, aber PowerShell zeigt eine Konsolenmeldung an, die 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 ob Skripts digital signiert werden müssen, bevor sie ausgeführt werden.

Der Set-ExecutionPolicy Standardbereich des Cmdlets ist LocalMachine, was sich auf alle Benutzer auswirkt, die den Computer verwenden. Um die Ausführungsrichtlinie für LocalMachine zu ändern, starten Sie PowerShell mit "Als Administrator ausführen".

Verwenden Sie die Verwendung Get-ExecutionPolicy -List, um die Ausführungsrichtlinien für jeden Bereich in der Reihenfolge der Rangfolge anzuzeigen. Um die effektive Ausführungsrichtlinie für Ihre PowerShell-Sitzung Get-ExecutionPolicy ohne Parameter anzuzeigen.

Beispiele

Beispiel 1: Festlegen einer Ausführungsrichtlinie

In diesem Beispiel wird gezeigt, wie Sie die Ausführungsrichtlinie für den lokalen Computer festlegen.

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 Parameter Scope gibt den Standardwert "LocalMachine" an. Verwenden Sie zum Anzeigen der Ausführungsrichtlinieneinstellungen das Get-ExecutionPolicy Cmdlet mit dem List-Parameter .

Beispiel 2: Festlegen einer Ausführungsrichtlinie, die mit einer Gruppenrichtlinie

Dieser Befehl versucht, die Ausführungsrichtlinie des LocalMachine-Bereichs auf "Eingeschränkt" festzulegen. LocalMachine ist restriktiver, ist aber nicht die effektive Richtlinie, da sie mit einem Gruppenrichtlinie in Konflikt steht. Die Richtlinie "Eingeschränkt " 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 eingeschränkte Richtlinie anzugeben. Der Parameter Scope gibt den Standardwert "LocalMachine" an. Das Get-ChildItem Cmdlet verwendet den Parameter Path mit dem HKLM-Anbieter , um den 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 nach unten in der Pipeline. Set-ExecutionPolicy akzeptiert pipelineeingaben und erfordert nicht den ExecutionPolicy-Parameter .

PS> 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 Parameter ComputerName gibt den Remotecomputer Server01 an. Der ScriptBlock-Parameter wird auf dem Remotecomputer ausgeführt Get-ExecutionPolicy . Das Get-ExecutionPolicy Objekt wird an die Set-ExecutionPolicyPipeline 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, CurrentUser, festlegen. 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 Parameter Scope 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 Sie mithilfe der nicht definierten Ausführungsrichtlinie eine Ausführungsrichtlinie für einen angegebenen Bereich 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 nicht definierte Richtlinie anzugeben. Der Parameter Scope 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 Prozessbereich wirkt sich nur auf die aktuelle PowerShell-Sitzung aus. Die Ausführungsrichtlinie wird in der Umgebungsvariable $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-ExecutionPolicyParameter ExecutionPolicy wird verwendet, 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

In diesem Beispiel wird gezeigt, wie die RemoteSigned-Ausführungsrichtlinie verhindert, dass nicht signierte Skripts ausgeführt werden.

Eine bewährte Methode besteht darin, den Code des Skripts zu lesen und zu überprüfen, ob es sicher ist , bevor Sie das Unblock-File Cmdlet verwenden. Das Unblock-File Cmdlet entsperrt Skripts, damit sie ausgeführt werden können, aber die Ausführungsrichtlinie nicht ändert.

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-ExecutionPolicyParameter ExecutionPolicy wird verwendet, um die RemoteSigned-Richtlinie anzugeben. Die Richtlinie wird für den Standardbereich LocalMachine festgelegt.

Das Get-ExecutionPolicy Cmdlet zeigt, dass RemoteSigned die effektive Ausführungsrichtlinie für die aktuelle PowerShell-Sitzung ist.

Das skript Start-ActivityTracker.ps1 wird aus dem aktuellen Verzeichnis ausgeführt. Das Skript wird von RemoteSigned blockiert, da das Skript nicht digital signiert ist.

In diesem Beispiel wurde der Code des Skripts überprüft und als sicher ausgeführt. Das Unblock-File Cmdlet verwendet den Path-Parameter , um die Blockierung des Skripts zu aufheben.

Um zu überprüfen, ob Unblock-File die Ausführungsrichtlinie nicht geändert wurde, Get-ExecutionPolicy zeigt die effektive Ausführungsrichtlinie RemoteSigned an.

Das Skript, Start-ActivityTracker.ps1 wird aus dem aktuellen Verzeichnis ausgeführt. Das Skript beginnt mit der Unblock-File Ausführung, da es vom 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 "Nicht definiert" festgelegt ist, wird "Restricted " zur effektiven 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.
  • Umgehung. Es findet keine Blockierung statt und es werden keine Warnungen oder Eingabeaufforderungen ausgegeben.
  • Default. Legt die Standardausführungsrichtlinie fest. Für Windows-Clients oder RemoteSigned für Windows-Server eingeschränkt .
  • RemoteSigned. Erfordert, dass alle skripts und Konfigurationsdateien, die aus dem Internet heruntergeladen wurden, von einem vertrauenswürdigen Herausgeber signiert werden. Die Standardausführungsrichtlinie für Windows-Servercomputer.
  • Eingeschränkt. Lädt keine Konfigurationsdateien oder führt Skripts aus. Die Standardausführungsrichtlinie für Windows-Clientcomputer.
  • Nicht definiert. Es wird keine Ausführungsrichtlinie für den Bereich festgelegt. Entfernt eine zugewiesene Ausführungsrichtlinie aus einem Bereich, der nicht von einem Gruppenrichtlinie festgelegt wird. Wenn die Ausführungsrichtlinie in allen Bereichen nicht definiert ist, ist die effektive Ausführungsrichtlinie eingeschränkt.
  • Uneingeschränkt. 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. Verwenden Sie Vorsicht mit diesem Parameter, 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 durch die Reihenfolge der Rangfolge wie folgt bestimmt:

  • MachinePolicy. Legen Sie für alle Benutzer des Computers einen Gruppenrichtlinie fest.
  • UserPolicy. Legen Sie einen Gruppenrichtlinie für den aktuellen Benutzer des Computers fest.
  • Prozess: Betrifft nur die aktuelle PowerShell-Sitzung.
  • CurrentUser. Betrifft nur den aktuellen Benutzer.
  • LocalMachine. Standardbereich, der sich auf alle Benutzer des Computers auswirkt.

Der Prozessbereich wirkt sich nur auf die aktuelle PowerShell-Sitzung aus. Die Ausführungsrichtlinie wird in der Umgebungsvariable $env:PSExecutionPolicyPreferenceanstelle der Registrierung 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

Microsoft.PowerShell.ExecutionPolicy, System.String

Sie können ein Ausführungsrichtlinienobjekt oder eine Zeichenfolge mit dem Namen einer Ausführungsrichtlinie an .Set-ExecutionPolicy

Ausgaben

None

Set-ExecutionPolicy gibt keine Ausgabe zurück.

Hinweise

Set-ExecutionPolicy ändert die Bereiche MachinePolicy und UserPolicy nicht, da sie von Gruppenrichtlinien festgelegt werden.

Set-ExecutionPolicyüberschreiben keine Gruppenrichtlinie, auch wenn die Benutzerpräferenz restriktiver als die Richtlinie ist.

Wenn die Gruppenrichtlinie Skriptausführung für den Computer oder Benutzer aktiviert ist, wird die Benutzereinstellung gespeichert, ist jedoch nicht wirksam. PowerShell zeigt eine Meldung an, die den Konflikt erläutert.