Set-ExecutionPolicy

Définit les stratégies d’exécution PowerShell pour les ordinateurs Windows.

Syntax

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Description

L’applet Set-ExecutionPolicy de commande modifie les stratégies d’exécution PowerShell pour les ordinateurs Windows. Pour plus d’informations, consultez about_Execution_Policies.

À compter de PowerShell 6.0 pour les ordinateurs non-Windows, la stratégie d’exécution par défaut est illimitée et ne peut pas être modifiée. L’applet Set-ExecutionPolicy de commande est disponible, mais PowerShell affiche un message de console qui n’est pas pris en charge.

Une stratégie d’exécution fait partie de la stratégie de sécurité PowerShell. Les stratégies d’exécution déterminent si vous pouvez charger des fichiers de configuration, tels que votre profil PowerShell ou exécuter des scripts. Et si les scripts doivent être signés numériquement avant qu’ils ne soient exécutés.

L’étendue par défaut de l’applet Set-ExecutionPolicy de commande est LocalMachine, ce qui affecte tout le monde qui utilise l’ordinateur. Pour modifier la stratégie d’exécution pour LocalMachine, démarrez PowerShell avec Exécuter en tant qu’administrateur.

Pour afficher les stratégies d’exécution pour chaque étendue dans l’ordre de priorité, utilisez Get-ExecutionPolicy -List. Pour afficher la stratégie d’exécution effective de votre session PowerShell, utilisez Get-ExecutionPolicy sans paramètres.

Exemples

Exemple 1 : Définir une stratégie d’exécution

Cet exemple montre comment définir la stratégie d’exécution pour l’ordinateur local.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

L’applet Set-ExecutionPolicy de commande utilise le paramètre ExecutionPolicy pour spécifier la stratégie RemoteSigned . Le paramètre Scope spécifie la valeur d’étendue par défaut, LocalMachine. Pour afficher les paramètres de stratégie d’exécution, utilisez l’applet Get-ExecutionPolicy de commande avec le paramètre List .

Exemple 2 : Définir une stratégie d’exécution qui est en conflit avec un stratégie de groupe

Cette commande tente de définir la stratégie d’exécution de l’étendue LocalMachine sur Restricted. LocalMachine est plus restrictif, mais n’est pas la stratégie efficace, car elle est en conflit avec un stratégie de groupe. La stratégie restreinte est écrite dans la ruche du Registre HKEY_LOCAL_MACHINE.

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

L’applet Set-ExecutionPolicy de commande utilise le paramètre ExecutionPolicy pour spécifier la stratégie Restricted . Le paramètre Scope spécifie la valeur d’étendue par défaut, LocalMachine. L’applet Get-ChildItem de commande utilise le paramètre Path avec le fournisseur HKLM pour spécifier l’emplacement du Registre.

Exemple 3 : Appliquer la stratégie d’exécution d’un ordinateur distant à un ordinateur local

Cette commande obtient l’objet de stratégie d’exécution à partir d’un ordinateur distant et définit la stratégie sur l’ordinateur local. Get-ExecutionPolicy envoie un objet Microsoft.PowerShell.ExecutionPolicy vers le bas du pipeline. Set-ExecutionPolicy accepte l’entrée de pipeline et ne nécessite pas le paramètre ExecutionPolicy .

PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

L’applet Invoke-Command de commande est exécutée sur l’ordinateur local et envoie scriptBlock à l’ordinateur distant. Le paramètre ComputerName spécifie l’ordinateur distant , Server01. Le paramètre ScriptBlock s’exécute Get-ExecutionPolicy sur l’ordinateur distant. L’objet Get-ExecutionPolicy est envoyé vers le bas du pipeline vers le Set-ExecutionPolicy. Set-ExecutionPolicy applique la stratégie d’exécution à l’étendue par défaut de l’ordinateur local, LocalMachine.

Exemple 4 : Définir l’étendue d’une stratégie d’exécution

Cet exemple montre comment définir une stratégie d’exécution pour une étendue spécifiée, CurrentUser. L’étendue CurrentUser affecte uniquement l’utilisateur qui définit cette étendue.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy utilise le paramètre ExecutionPolicy pour spécifier la stratégie AllSigned . Le paramètre Scope spécifie CurrentUser. Pour afficher les paramètres de stratégie d’exécution, utilisez l’applet Get-ExecutionPolicy de commande avec le paramètre List .

La stratégie d’exécution effective pour l’utilisateur devient AllSigned.

Exemple 5 : Supprimer la stratégie d’exécution de l’utilisateur actuel

Cet exemple montre comment utiliser la stratégie d’exécution non définie pour supprimer une stratégie d’exécution pour une étendue spécifiée.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Set-ExecutionPolicy utilise le paramètre ExecutionPolicy pour spécifier la stratégie Non définie . Le paramètre Scope spécifie CurrentUser. Pour afficher les paramètres de stratégie d’exécution, utilisez l’applet Get-ExecutionPolicy de commande avec le paramètre List .

Exemple 6 : Définir la stratégie d’exécution pour la session PowerShell active

L’étendue du processus affecte uniquement la session PowerShell active. La stratégie d’exécution est enregistrée dans la variable $env:PSExecutionPolicyPreference d’environnement et est supprimée lorsque la session est fermée.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       AllSigned
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Utilise Set-ExecutionPolicy le paramètre ExecutionPolicy pour spécifier la stratégie AllSigned . Le paramètre Scope spécifie la valeur Process. Pour afficher les paramètres de stratégie d’exécution, utilisez l’applet Get-ExecutionPolicy de commande avec le paramètre List .

Exemple 7 : Débloquer un script pour l’exécuter sans modifier la stratégie d’exécution

Cet exemple montre comment la stratégie d’exécution RemoteSigned vous empêche d’exécuter des scripts non signés.

Une bonne pratique consiste à lire le code du script et à vérifier qu’il est sécurisé avant d’utiliser l’applet Unblock-File de commande. L’applet Unblock-File de commande débloque les scripts pour qu’ils puissent s’exécuter, mais ne modifient pas la stratégie d’exécution.

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:

Utilise Set-ExecutionPolicy le paramètre ExecutionPolicy pour spécifier la stratégie RemoteSigned . La stratégie est définie pour l’étendue par défaut, LocalMachine.

L’applet Get-ExecutionPolicy de commande indique que RemoteSigned est la stratégie d’exécution effective pour la session PowerShell active.

Le script Start-ActivityTracker.ps1 est exécuté à partir du répertoire actif. Le script est bloqué par RemoteSigned , car le script n’est pas signé numériquement.

Pour cet exemple, le code du script a été examiné et vérifié comme sûr à exécuter. L’applet Unblock-File de commande utilise le paramètre Path pour débloquer le script.

Pour vérifier que Unblock-File la stratégie d’exécution n’a pas changé, Get-ExecutionPolicy affiche la stratégie d’exécution effective , RemoteSigned.

Le script, Start-ActivityTracker.ps1 est exécuté à partir du répertoire actif. Le script commence à s’exécuter, car il a été débloqué par l’applet de Unblock-File commande.

Paramètres

-Confirm

Vous demande une confirmation avant d’exécuter l’applet de commande.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

Spécifie la stratégie d’exécution. S’il n’existe aucune stratégie de groupe et que la stratégie d’exécution de chaque étendue est définie sur Undefined, Restricted devient la stratégie effective pour tous les utilisateurs.

Les valeurs de stratégie d’exécution acceptables sont les suivantes :

  • AllSigned. Exige que tous les scripts et tous les fichiers de configuration soient signés par un éditeur approuvé, y compris les scripts écrits sur l’ordinateur local.
  • Contournez. rien n'est bloqué, et aucun avertissement, ni aucune invite ne s'affiche.
  • Par défaut. Définit la stratégie d’exécution par défaut. Restreint pour les clients Windows ou RemoteSigned pour les serveurs Windows.
  • RemoteSigned. Exige que tous les scripts et tous les fichiers de configuration téléchargés à partir d’Internet soient signés par un éditeur approuvé. Stratégie d’exécution par défaut pour les ordinateurs Windows Server.
  • Restreint. Ne charge pas de fichiers de configuration ou n’exécute pas de scripts. Stratégie d’exécution par défaut ordinateurs clients Windows.
  • Non défini. Aucune stratégie d’exécution n’est définie pour l’étendue. Supprime une stratégie d’exécution affectée d’une étendue qui n’est pas définie par un stratégie de groupe. Si la stratégie d’exécution dans toutes les étendues n’est pas définie, la stratégie d’exécution effective est restreinte.
  • Non restreint. À compter de PowerShell 6.0, il s’agit de la stratégie d’exécution par défaut pour les ordinateurs non Windows et ne peut pas être modifiée. charge tous les fichiers de configuration et exécute tous les scripts. Si vous exécutez un script non signé téléchargé à partir d’Internet, vous êtes invité à obtenir l’autorisation avant son exécution.
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

Supprime toutes les invites de confirmation. Utilisez la prudence avec ce paramètre pour éviter les résultats inattendus.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

Spécifie l’étendue affectée par une stratégie d’exécution. L’étendue par défaut est LocalMachine.

La stratégie d’exécution effective est déterminée par l’ordre de priorité suivant :

  • MachinePolicy. Défini par un stratégie de groupe pour tous les utilisateurs de l’ordinateur.
  • UserPolicy. Défini par un stratégie de groupe pour l’utilisateur actuel de l’ordinateur.
  • Processus. Affecte uniquement la session PowerShell actuelle.
  • CurrentUser. Affecte uniquement l’utilisateur actuel.
  • LocalMachine. Étendue par défaut qui affecte tous les utilisateurs de l’ordinateur.

L’étendue de processus affecte uniquement la session PowerShell actuelle. La stratégie d’exécution est enregistrée dans la variable $env:PSExecutionPolicyPreferenced’environnement, plutôt que dans le Registre. Lorsque la session PowerShell est fermée, la variable et la valeur sont supprimées.

Les stratégies d’exécution de l’étendue CurrentUser sont écrites dans la HKEY_LOCAL_USER de Registre.

Les stratégies d’exécution de l’étendue LocalMachine sont écrites dans la ruche du Registre HKEY_LOCAL_MACHINE.

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

Montre ce qui se passe en cas d’exécution de l’applet de commande. L’applet de commande n’est pas exécutée.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entrées

Microsoft.PowerShell.ExecutionPolicy, System.String

Vous pouvez diriger un objet de stratégie d’exécution ou une chaîne qui contient le nom d’une stratégie d’exécution vers Set-ExecutionPolicy.

Sorties

None

Set-ExecutionPolicy ne retourne aucune sortie.

Notes

Set-ExecutionPolicy ne modifie pas les étendues MachinePolicy et UserPolicy , car elles sont définies par les stratégies de groupe.

Set-ExecutionPolicyne remplace pas un stratégie de groupe, même si la préférence utilisateur est plus restrictive que la stratégie.

Si le stratégie de groupe Activer l’exécution du script est activé pour l’ordinateur ou l’utilisateur, la préférence utilisateur est enregistrée, mais elle n’est pas effective. PowerShell affiche un message qui explique le conflit.