Personnalisation de votre environnement shell

Un profil PowerShell est un script qui s’exécute au démarrage de PowerShell. Vous pouvez utiliser votre profil pour personnaliser l’environnement. Vous pouvez :

  • Ajouter des alias, des fonctions et des variables
  • Charger des modules
  • Créer des lecteurs PowerShell
  • Exécuter des commandes arbitraires
  • Modifier les paramètres préférés

Le fait d’ajouter ces paramètres à votre profil garantit leur disponibilité chaque fois que vous démarrerez PowerShell sur votre système.

Notes

Pour exécuter des scripts dans Windows, la stratégie d’exécution de PowerShell doit être définie au minimum sur RemoteSigned. Les stratégies d’exécution ne s’appliquent pas à macOS et à Linux. Pour plus d’informations, consultez about_Execution_Policy.

Variable $PROFILE

La variable automatique $PROFILE stocke les chemins des profils PowerShell qui sont disponibles dans la session active.

Il existe quatre profils qui prennent en charge les différentes étendues utilisateur et les différents hôtes PowerShell. Les chemins complets de chaque script de profil sont stockés dans les propriétés membres suivantes de $PROFILE.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Vous pouvez créer des scripts de profil qui s’exécutent pour tous les utilisateurs ou pour un seul utilisateur (CurrentUser). Les profils CurrentUser sont stockés dans le répertoire de base de l’utilisateur.

Il existe également des profils qui s’exécutent pour tous les hôtes PowerShell ou pour certains hôtes uniquement. Le script de profil de chaque hôte PowerShell a un nom unique pour l’hôte en question. Par exemple, le nom de fichier de l’hôte de console standard sur Windows ou de l’application de terminal par défaut sur les autres plateformes est Microsoft.PowerShell_profile.ps1. Pour Visual Studio Code (VS Code), le nom de fichier est Microsoft.VSCode_profile.ps1.

Pour plus d’informations, consultez about_Profiles.

Par défaut, le référencement de la variable $PROFILE retourne le chemin du profil « Utilisateur actuel, Hôte actuel ». Le chemin des autres profils est accessible via les propriétés de la variable $PROFILE. Par exemple :

PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1

Comment créer votre profil personnel

Lorsque vous installez PowerShell pour la première fois sur un système, les fichiers de script de profil et les répertoires auxquels ils appartiennent n’existent pas. La commande suivante crée le fichier de script de profil « Utilisateur actuel, Hôte actuel » s’il n’existe pas.

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

Le paramètre Force de l’applet de commande New-Item crée les dossiers nécessaires lorsqu’ils n’existent pas. Une fois que vous avez créé le fichier de script, vous pouvez utiliser votre éditeur favori pour personnaliser votre environnement shell.

Ajout de personnalisations à votre profil

Les articles précédents ont abordé l’utilisation de la saisie semi-automatique via la touche de tabulation, des prédicteurs de commandes et des alias. Ils ont montré les commandes utilisées pour charger les modules nécessaires, créer des compléteurs personnalisés, définir des combinaisons de touches et d’autres paramètres. Il s’agit des types de personnalisations qui doivent être disponibles dans chaque session interactive PowerShell. Ces paramètres se trouvent dans le script de profil.

Pour modifier votre script de profil, le plus simple est d’ouvrir le fichier dans votre éditeur de code favori. Par exemple, la commande suivante ouvre le profil dans VS Code.

code $PROFILE

Vous pouvez également utiliser notepad.exe dans Windows, vi dans Linux, ou tout autre éditeur de texte.

Le script de profil suivant contient des exemples pour la plupart des personnalisations mentionnées dans les articles précédents. Vous pouvez utiliser l’un de ces paramètres dans votre propre profil.

## Map PSDrives to other registry hives
if (!(Test-Path HKCR:)) {
    $null = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
    $null = New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
}

## Customize the prompt
function prompt {
    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = [Security.Principal.WindowsPrincipal] $identity
    $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

    $prefix = $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
                elseif ($principal.IsInRole($adminRole)) { "[ADMIN]: " }
                else { '' })
    $body = 'PS ' + $(Get-Location)
    $suffix = $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
    $prefix + $body + $suffix
}

## Create $PSStyle if running on a version older than 7.2
## - Add other ANSI color definitions as needed

if ($PSVersionTable.PSVersion.ToString() -lt '7.2.0') {
    # define escape char since "`e" may not be supported
    $esc = [char]0x1b
    $PSStyle = [pscustomobject]@{
        Foreground = @{
            Magenta = "${esc}[35m"
            BrightYellow = "${esc}[93m"
        }
        Background = @{
            BrightBlack = "${esc}[100m"
        }
    }
}

## Set PSReadLine options and keybindings
$PSROptions = @{
    ContinuationPrompt = '  '
    Colors             = @{
        Operator         = $PSStyle.Foreground.Magenta
        Parameter        = $PSStyle.Foreground.Magenta
        Selection        = $PSStyle.Background.BrightBlack
        InLinePrediction = $PSStyle.Foreground.BrightYellow + $PSStyle.Background.BrightBlack
    }
}
Set-PSReadLineOption @PSROptions
Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord
Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine

## Add argument completer for the dotnet CLI tool
$scriptblock = {
    param($wordToComplete, $commandAst, $cursorPosition)
    dotnet complete --position $cursorPosition $commandAst.ToString() |
        ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock

Ce script de profil fournit des exemples pour la personnalisation suivante :

  • Ajoute deux nouveaux PSDrive pour les autres ruches du registre racine.
  • Crée une invite personnalisée qui change si vous exécutez une session avec élévation de privilèges.
  • Configure PSReadLine et ajoute la combinaison de touches. Les paramètres de couleur utilisent la fonctionnalité $PSStyle pour définir les paramètres de couleur ANSI.
  • Ajoute la saisie semi-automatique via la touche de tabulation pour l’outil CLI dotnet. L’outil fournit des paramètres permettant de résoudre les arguments de ligne de commande. Le bloc de script pour Register-ArgumentCompleter utilise cette fonctionnalité afin de permettre la saisie semi-automatique via la touche de tabulation.