

# Stratégies d'exécution PowerShell:

https://docs.microsoft.com/fr-fr/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7



#### 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 à exécuter des scripts d'éditeurs que vous n'avez pas encore classés comme fiables ou non fiables. 
- Risques liés à l'exécution de scripts signés mais malveillants. 

#### ByPass

- Rien n'est bloqué et il n'y a aucun avertissement ou invite. 
- Cette stratégie d'exécution est conçue pour les configurations dans lesquelles un script PowerShell est intégré à une application plus grande 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** aux clients Windows. 
- **RemoteSigned** pour les serveurs Windows. 

#### RemoteSigned

- La stratégie d'exécution par défaut pour les ordinateurs serveurs Windows. 
- Les scripts peuvent s'exécuter. 
- Nécessite une signature numérique d'un éditeur de confiance sur les scripts et les fichiers de configuration téléchargés sur Internet, qui incluent des programmes de messagerie électronique et de messagerie instantanée. 
- Ne nécessite pas des signatures numériques sur des scripts écrits sur l'ordinateur local et non téléchargés sur Internet. 
- Exécute des scripts téléchargés sur Internet et non signés, si les scripts sont débloqués, par exemple en utilisant l'applet de commande `Unblock-File`. 
- Risque d'exécuter des scripts non signés à partir de sources autres qu'Internet et des scripts signés qui pourraient être malveillants. 

#### Restricted

- La stratégie d'exécution par défaut pour les ordinateurs clients Windows. 
- Autorise les commandes individuelles, mais n'autorise pas les scripts. 
- Empêche l'exécution de tous les fichiers de script, y compris les fichiers de formatage 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 la portée actuelle. 
- Si la politique d'exécution dans toutes les étendues est **Undefined**, la politique d'exécution effective est **Restricted**, qui est la politique d'exécution par défaut. 

#### Unrestricted

- La stratégie d'exécution par défaut pour les ordinateurs non Windows et ne peut pas être modifiée. 
- Des scripts non signés peuvent s'exécuter. Il existe un risque d'exécuter des scripts malveillants. 
- Avertit l'utilisateur avant d'exécuter des scripts et des fichiers de configuration qui ne proviennent pas de la zone intranet locale. 



### Portée de la politique d'exécution:

#### MachinePolicy

Défini par une stratégie de groupe pour tous les utilisateurs de l'ordinateur.

#### UserPolicy

Défini par une stratégie de groupe pour l'utilisateur actuel de l'ordinateur.

#### Process

L'étendue du processus affecte uniquement la session PowerShell en cours. La stratégie d'exécution est enregistrée dans la variable d'environnement `$ env: PSExecutionPolicyPreference`, plutôt que dans le registre. Lorsque la session PowerShell est fermée, la variable et la valeur sont supprimées.

#### CurrentUser

La stratégie d'exécution affecte uniquement l'utilisateur actuel. Il est stocké dans la sous-clé de registre `HKEY_CURRENT_USER`.

#### LocalMachine

La stratégie d'exécution affecte tous les utilisateurs de l'ordinateur actuel. Il est stocké dans la sous-clé de registre `HKEY_LOCAL_MACHINE`.



### Obtenir la politique d'exécution:

```powershell
# Obtenir la politique d'exécution courante

PS C:\Users\bruno> Get-ExecutionPolicy
Restricted

# Obtenir toutes les politiques d'exécution qui affectent la session en cours et les afficher dans l'ordre de priorité:

PS C:\Users\bruno> Get-ExecutionPolicy -List

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

# Obtenir la stratégie d'exécution pour la portée CurrentUser:

PS C:\Users\bruno> Get-ExecutionPolicy -Scope CurrentUser
Undefined

```



### Modifier la politique d'exécution:

```powershell
# Modifier la politique d'exécution courante
#  - nécessite d'ouvrir PowerShell en tant qu'administrateur

PS Set-ExecutionPolicy -ExecutionPolicy RemoteSigned


PS Get-ExecutionPolicy -List

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

# Modifier la politique d'exécution courante pour CurrentUser

PS Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

PS C:\WINDOWS\system32> Get-ExecutionPolicy -List                                                                                                                                                                                                       Scope 					ExecutionPolicy                                                                                                   ----- 					---------------                                                                                           MachinePolicy       Undefined                                                                                              UserPolicy       	 Undefined                                                                                                 Process       		   Undefined                                                                                             CurrentUser    		 RemoteSigned  <                                                                                           LocalMachine        Undefined  

```



### Supprimer la politique d'exécution:

Cela revient à la déclarer `Undefined`

```powershell
PS Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

PS Get-ExecutionPolicy -List

Scope.              ExecutionPolicy
----- 						---------------                                                                                           MachinePolicy       Undefined                                                                                              UserPolicy       	 Undefined                                                                                                 Process       			 Undefined                                                                                             CurrentUser       	 Undefined                                                                                            LocalMachine    	  Undefined   <

```



### Modifier la politique d'exécution pour une session:

```powershell
PS pwsh.exe -ExecutionPolicy AllSigned
```



### Priorités de politique 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