about_Execution_Policies

Description courte

Décrit les stratégies d’exécution de PowerShell et explique comment les gérer.

Description longue

La stratégie d’exécution de PowerShell est une fonctionnalité de sécurité qui contrôle les conditions dans lesquelles PowerShell charge les fichiers de configuration et exécute des scripts. Cette fonctionnalité permet d’éviter l’exécution de scripts malveillants.

sur un ordinateur Windows, vous pouvez définir une stratégie d’exécution pour l’ordinateur local, pour l’utilisateur actuel ou pour une session particulière. Vous pouvez également utiliser un paramètre de stratégie de groupe pour définir des stratégies d’exécution pour les ordinateurs et les utilisateurs.

Les stratégies d’exécution de l’ordinateur local et de l’utilisateur actuel sont stockées dans le registre. Vous n’avez pas besoin de définir des stratégies d’exécution dans votre profil PowerShell. La stratégie d’exécution pour une session particulière est stockée uniquement en mémoire et est perdue lorsque la session est fermée.

La stratégie d’exécution n’est pas un système de sécurité qui restreint les actions des utilisateurs. Par exemple, les utilisateurs peuvent facilement contourner une stratégie en tapant le contenu du script sur la ligne de commande lorsqu’ils ne peuvent pas exécuter un script. Au lieu de cela, la stratégie d’exécution aide les utilisateurs à définir des règles de base et les empêche de les violer involontairement.

sur les ordinateurs non-Windows, la stratégie d’exécution par défaut est Unrestricted et ne peut pas être modifiée. L' Set-ExecutionPolicy applet de commande est disponible, mais PowerShell affiche un message de console qui n’est pas pris en charge. bien que Get-ExecutionPolicy retourne Unrestricted sur les plateformes non Windows, le comportement correspond Bypass vraiment parce que ces plateformes n’implémentent pas les Zones de Sécurité Windows.

Stratégies d’exécution de PowerShell

l’application de ces stratégies ne se produit que sur les plateformes de Windows. Les stratégies d’exécution de PowerShell sont les suivantes :

AllSigned

  • Les scripts peuvent s’exécuter.
  • nécessite que tous les scripts et fichiers de configuration soient signés par un éditeur approuvé, y compris les scripts que vous écrivez sur l'ordinateur local.
  • Vous invite à confirmer l’exécution des scripts des serveurs de publication que vous n’avez pas encore classés comme approuvés ou non approuvés.
  • Risques liés à l’exécution de scripts signés, mais malveillants.

Bypass

  • rien n'est bloqué, et aucun avertissement, ni aucune invite ne s'affiche.
  • Cette stratégie d’exécution est conçue pour les configurations dans lesquelles un script PowerShell est intégré à une application plus volumineuse ou pour les configurations dans lesquelles PowerShell est la base d’un programme qui possède son propre modèle de sécurité.

Default

  • Définit la stratégie d’exécution par défaut.
  • Restricted pour les clients Windows.
  • RemoteSigned pour les serveurs Windows.

RemoteSigned

  • stratégie d’exécution par défaut pour les ordinateurs Windows server.
  • Les scripts peuvent s’exécuter.
  • Requiert une signature numérique d’un éditeur approuvé sur les scripts et les fichiers de configuration téléchargés à partir d’Internet, y compris les programmes de messagerie et de messagerie instantanée.
  • Ne requiert pas de signatures numériques sur les scripts écrits sur l’ordinateur local et non téléchargés à partir d’Internet.
  • Exécute les scripts qui sont téléchargés à partir d’Internet et non signés, si les scripts sont débloqués, par exemple à l’aide de l' Unblock-File applet de commande.
  • Risques liés à l’exécution de scripts non signés provenant de sources autres que l’Internet et scripts signés pouvant être malveillants.

Restricted

  • stratégie d’exécution par défaut pour les ordinateurs clients Windows.
  • Autorise des commandes individuelles, mais n’autorise pas les scripts.
  • Empêche l’exécution de tous les fichiers de script, y compris les fichiers de mise en forme et de configuration ( .ps1xml ), les fichiers de script de module ( .psm1 ) et les profils PowerShell ( .ps1 ).

Undefined

  • Aucune stratégie d’exécution n’est définie dans l’étendue actuelle.
  • si la stratégie d’exécution dans toutes les étendues est Undefined , la stratégie d’exécution effective concerne Restricted Windows clients et RemoteSigned pour Windows serveur.

Unrestricted

  • la stratégie d’exécution par défaut pour les ordinateurs non-Windows et ne peut pas être modifiée.
  • Les scripts non signés peuvent s’exécuter. L’exécution de scripts malveillants présente un risque.
  • Avertit l’utilisateur avant d’exécuter des scripts et des fichiers de configuration qui ne proviennent pas de la zone Intranet local.

Notes

Sur les systèmes qui ne distinguent pas les chemins d’accès UNC (Universal Naming Convention) des chemins Internet, les scripts identifiés par un chemin d’accès UNC peuvent ne pas être autorisés à s’exécuter avec la stratégie d’exécution RemoteSigned .

Étendue de la stratégie d’exécution

Vous pouvez définir une stratégie d’exécution qui est effective uniquement dans une étendue particulière.

Les valeurs valides pour Scope sont MachinePolicy , UserPolicy, Process , CurrentUser et LocalMachine. LocalMachine est la valeur par défaut lors de la définition d’une stratégie d’exécution.

Les valeurs sont répertoriées dans l' Scope ordre de priorité. La stratégie qui est prioritaire est effective dans la session active, même si une stratégie plus restrictive a été définie à un niveau de priorité inférieur.

Pour plus d’informations, consultez Set-ExecutionPolicy.

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.

Process

L' Process étendue affecte uniquement la session PowerShell active. La stratégie d’exécution est enregistrée dans la variable $env:PSExecutionPolicyPreference d’environnement, plutôt que dans le registre. Une fois la session PowerShell fermée, la variable et la valeur sont supprimées.

Utilisateur en cours

la stratégie d'exécution affecte uniquement l'utilisateur actuel. Elle est stockée dans la sous-clé de Registre HKEY_CURRENT_USER .

LocalMachine

La stratégie d’exécution affecte tous les utilisateurs sur l’ordinateur actuel. Elle est stockée dans la sous-clé de Registre HKEY_LOCAL_MACHINE .

Gestion de la stratégie d’exécution avec PowerShell

Pour obtenir la stratégie d’exécution effective pour la session PowerShell actuelle, utilisez l' Get-ExecutionPolicy applet de commande.

La commande suivante obtient la stratégie d’exécution effective :

Get-ExecutionPolicy

Pour obtenir toutes les stratégies d’exécution qui affectent la session active et les afficher dans l’ordre de priorité :

Get-ExecutionPolicy -List

Le résultat ressemble à l’exemple de sortie suivant :

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

Dans ce cas, la stratégie d’exécution effective est RemoteSigned car la stratégie d’exécution de l’utilisateur actuel est prioritaire sur la stratégie d’exécution définie pour l’ordinateur local.

Pour obtenir la stratégie d’exécution définie pour une étendue particulière, utilisez le Scope paramètre de Get-ExecutionPolicy .

Par exemple, la commande suivante obtient la stratégie d’exécution pour l’étendue CurrentUser :

Get-ExecutionPolicy -Scope CurrentUser

Modifier la stratégie d’exécution

pour modifier la stratégie d’exécution de PowerShell sur votre ordinateur Windows, utilisez l' Set-ExecutionPolicy applet de commande. La modification prend effet immédiatement. Vous n’avez pas besoin de redémarrer PowerShell.

Si vous définissez la stratégie d’exécution pour les étendues LocalMachine ou CurrentUser, la modification est enregistrée dans le registre et reste effective jusqu’à ce que vous la modifiiez de nouveau.

Si vous définissez la stratégie d’exécution pour l' Process étendue, elle n’est pas enregistrée dans le registre. La stratégie d’exécution est conservée jusqu’à la fermeture du processus en cours et de tous les processus enfants.

Notes

dans Windows Vista et les versions ultérieures de Windows, pour exécuter des commandes qui modifient la stratégie d’exécution pour l’ordinateur local, l’étendue LocalMachine , démarrez PowerShell avec l’option exécuter en tant qu’administrateur .

Pour modifier votre stratégie d’exécution :

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Par exemple :

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Pour définir la stratégie d’exécution dans une étendue particulière :

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Par exemple :

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Une commande pour modifier une stratégie d’exécution peut être exécutée, mais ne modifie toujours pas la stratégie d’exécution en vigueur.

Par exemple, une commande qui définit la stratégie d’exécution de l’ordinateur local peut être exécutée, mais être remplacée par la stratégie d’exécution de l’utilisateur actuel.

Supprimer la stratégie d’exécution

Pour supprimer la stratégie d’exécution d’une étendue particulière, affectez la valeur à Undefined la stratégie d’exécution.

Par exemple, pour supprimer la stratégie d’exécution pour tous les utilisateurs de l’ordinateur local :

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

Pour supprimer la stratégie d’exécution d’un Scope :

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

si aucune stratégie d’exécution n’est définie dans une étendue, la stratégie d’exécution effective est Restricted , qui est la valeur par défaut pour les clients Windows.

Définir une stratégie différente pour une session

Vous pouvez utiliser le paramètre ExecutionPolicy de pwsh.exe pour définir une stratégie d’exécution pour une nouvelle session PowerShell. La stratégie affecte uniquement la session active et les sessions enfants.

Pour définir la stratégie d’exécution d’une nouvelle session, démarrez PowerShell sur la ligne de commande, par exemple cmd.exe ou à partir de PowerShell, puis utilisez le paramètre ExecutionPolicy de pwsh.exe pour définir la stratégie d’exécution.

Par exemple :

pwsh.exe -ExecutionPolicy AllSigned

La stratégie d’exécution que vous définissez n’est pas stockée dans le registre. Au lieu de cela, il est stocké dans la $env:PSExecutionPolicyPreference variable d’environnement. La variable est supprimée lorsque vous fermez la session dans laquelle la stratégie est définie. Vous ne pouvez pas modifier la stratégie en modifiant la valeur de la variable.

Pendant la session, la stratégie d’exécution définie pour la session est prioritaire sur une stratégie d’exécution qui est définie dans le registre de l’ordinateur local ou de l’utilisateur actuel. Toutefois, il n’est pas prioritaire sur la stratégie d’exécution définie à l’aide d’un stratégie de groupe.

Utiliser stratégie de groupe pour gérer la stratégie d’exécution

Vous pouvez utiliser le paramètre activer l’exécution du Script stratégie de groupe pour gérer la stratégie d’exécution des ordinateurs de votre entreprise. Le paramètre stratégie de groupe remplace les stratégies d’exécution définies dans PowerShell dans toutes les étendues.

Les paramètres de stratégie d’exécution de script sont les suivants :

  • Si vous désactivez l’exécution des scripts, les scripts ne s’exécutent pas. Cela équivaut à la Restricted stratégie d’exécution.

  • Si vous activez activer l’exécution des scripts, vous pouvez sélectionner une stratégie d’exécution. Les paramètres de stratégie de groupe sont équivalents aux paramètres de stratégie d’exécution suivants :

    Stratégie de groupe Stratégie d’exécution
    Autoriser tous les scripts Unrestricted
    Autoriser les scripts locaux et les scripts signés distants RemoteSigned
    Autoriser uniquement les scripts signés AllSigned
  • Si l’exécution du script n’est pas configurée, elle n’a aucun effet. La stratégie d’exécution définie dans PowerShell est effective.

Les fichiers PowerShellExecutionPolicy. adm et PowerShellExecutionPolicy. admx ajoutent la stratégie d' exécution de script activer aux nœuds Configuration ordinateur et configuration utilisateur dans stratégie de groupe éditeur dans les chemins d’accès suivants.

pour Windows XP et Windows Server 2003 :

Administrative Templates\Windows Components\Windows PowerShell

pour Windows Vista et les versions ultérieures de Windows :

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

Les stratégies définies dans le nœud Configuration de l’ordinateur sont prioritaires sur les stratégies définies dans le nœud Configuration utilisateur.

Pour plus d’informations, consultez about_Group_Policy_Settings.

Priorité de la stratégie d’exécution

Lors de la détermination de la stratégie d’exécution effective pour une session, PowerShell évalue les stratégies d’exécution dans l’ordre de priorité suivant :

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: CurrentUser
Execution Policy: LocalMachine

Gérer les scripts signés et non signés

dans Windows, des programmes comme Internet Explorer et Microsoft Edge ajouter un autre flux de données aux fichiers téléchargés. Cela marque le fichier comme « provenant d’Internet ». Si votre stratégie d’exécution de PowerShell est RemoteSigned, PowerShell n’exécutera pas les scripts non signés téléchargés à partir d’Internet, y compris les programmes de messagerie et de messagerie instantanée.

Vous pouvez signer le script ou choisir d’exécuter un script non signé sans modifier la stratégie d’exécution.

À compter de PowerShell 3,0, vous pouvez utiliser le paramètre Stream de l' Get-Item applet de commande pour détecter les fichiers qui sont bloqués, car ils ont été téléchargés à partir d’Internet. Utilisez l' Unblock-File applet de commande pour débloquer les scripts afin de pouvoir les exécuter dans PowerShell.

Pour plus d’informations, consultez about_Signing, obtenir un élémentet Unblock-file.

Notes

D’autres méthodes de téléchargement de fichiers peuvent ne pas marquer les fichiers comme provenant de la zone Internet. Voici quelques exemples :

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

stratégie d’exécution sur Windows server Core et windows Nano server

lorsque PowerShell 6 est exécuté sur Windows server Core ou sur Windows Nano Server sous certaines conditions, les stratégies d’exécution peuvent échouer avec l’erreur suivante :

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell utilise les api de Windows Desktop Shell ( explorer.exe ) pour valider la Zone d’un fichier de script. le Shell Windows n’est pas disponible sur Windows server Core et sur Windows Nano server.

vous pouvez également recevoir cette erreur sur n’importe quel système Windows si l’interpréteur de commandes Windows Desktop n’est pas disponible ou ne répond pas. par exemple, lors de l’ouverture de session, un script d’ouverture de session PowerShell peut démarrer l’exécution avant que le bureau Windows soit prêt, provoquant ainsi un échec.

L’utilisation d’une stratégie d’exécution Bypass ou AllSigned ne nécessite pas de vérification de zone qui évite le problème.

Voir aussi