about_Environment_Variables
Description courte
Décrit comment accéder aux variables d’environnement et les gérer dans PowerShell.
Les variables d’environnement stockent les données utilisées par le système d’exploitation et d’autres programmes. PowerShell crée les variables d’environnement suivantes :
POWERSHELL_TELEMETRY_OPTOUT
POWERSHELL_DISTRIBUTION_CHANNEL
POWERSHELL_UPDATECHECK
PSExecutionPolicyPreference
PSModulePath
PSModuleAnalysisCachePath
PSDisableModuleAnalysisCacheCleanup
Pour obtenir une description complète de ces variables, consultez les variables d’environnement PowerShell de cet article.
Description longue
PowerShell peut accéder aux variables d’environnement et les gérer dans l’une des plateformes de système d’exploitation prises en charge. Le fournisseur d’environnement PowerShell vous permet d’obtenir, d’ajouter, de modifier, de supprimer et de supprimer des variables d’environnement dans la console actuelle.
Remarque
Contrairement à Windows, les noms de variables d’environnement sur macOS et Linux respectent la casse. Par exemple, $env:Path
et $env:PATH
sont des variables d’environnement différentes sur des plateformes non-Windows.
Les variables d’environnement, contrairement à d’autres types de variables dans PowerShell, sont toujours stockées sous forme de chaînes. Contrairement à d’autres variables, elles sont héritées par des processus enfants, tels que les travaux en arrière-plan locaux et les sessions dans lesquelles les membres du module s’exécutent. Cela rend les variables d’environnement bien adaptées au stockage des valeurs nécessaires dans les processus parent et enfant.
Sur Windows, les variables d’environnement peuvent être définies dans trois étendues :
- Étendue de l’ordinateur (ou système)
- Étendue d’utilisateur
- Étendue du processus
L’étendue processus contient les variables d’environnement disponibles dans le processus actuel ou la session PowerShell. Cette liste de variables est héritée du processus parent et est construite à partir des variables dans les étendues Machine et Utilisateur .
Lorsque vous modifiez des variables d’environnement dans PowerShell, la modification affecte uniquement la session active. Ce comportement ressemble au comportement de la set
commande dans l’interpréteur de commandes Windows et à la setenv
commande dans les environnements UNIX. Pour modifier les valeurs dans les étendues Machine ou Utilisateur, vous devez utiliser les méthodes de la classe System.Environment .
Pour apporter des modifications aux variables délimitées par l’ordinateur, vous devez également disposer d’autorisations. Si vous essayez de modifier une valeur sans autorisation suffisante, la commande échoue et PowerShell affiche une erreur.
PowerShell fournit plusieurs méthodes différentes pour l’utilisation et la gestion des variables d’environnement.
- Syntaxe de variable
- Le fournisseur d’environnement et les applets de commande Item
- Classe .NET System.Environment
Utiliser la syntaxe des variables
Vous pouvez afficher et modifier les valeurs des variables d’environnement avec la syntaxe suivante :
$Env:<variable-name>
Par exemple, pour afficher la valeur de la variable d’environnement WINDIR
:
$Env:windir
C:\Windows
Dans cette syntaxe, le signe dollar ($
) indique une variable et le nom du lecteur (Env:
) indique une variable d’environnement suivie du nom de la variable (windir
).
Vous pouvez créer et mettre à jour la valeur des variables d’environnement avec la syntaxe suivante :
$Env:<variable-name> = "<new-value>"
Par exemple, pour créer la variable d’environnement Foo
:
$Env:Foo = 'An example'
Étant donné que les variables d’environnement sont toujours des chaînes, vous pouvez les utiliser comme n’importe quelle autre variable contenant une chaîne. Par exemple :
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
Dans PowerShell, une variable d’environnement ne peut pas être définie sur une chaîne vide. La définition d’une variable d’environnement sur $null
ou d’une chaîne vide la supprime de la session active. Par exemple :
$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+ ~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Get-Member
a retourné une erreur, car la variable d’environnement a été supprimée.
Vous pouvez voir qu’il ne retourne pas d’erreur lorsque vous l’utilisez sur une chaîne vide :
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
Pour plus d’informations sur les variables dans PowerShell, consultez about_Variables.
Utiliser le fournisseur d’environnement et les applets de commande Item
Le fournisseur d’environnement de PowerShell vous offre une interface permettant d’interagir avec des variables d’environnement dans un format qui ressemble à un lecteur de système de fichiers. Il vous permet d’obtenir, d’ajouter, de modifier, d’effacer et de supprimer des variables d’environnement et des valeurs dans PowerShell.
Par exemple, pour créer la variable d’environnement Foo
avec la valeur suivante Bar
:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
Vous pouvez également copier la variable d’environnement avec Copy-Item
, définir la valeur d’une variable d’environnement avec Set-Item
, répertorier les variables d’environnement avec Get-Item
, et supprimer la variable d’environnement avec Remove-Item
.
Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
Utilisez l’applet Get-ChildItem
de commande pour afficher la liste complète des variables d’environnement :
Get-ChildItem Env:
Pour plus d’informations sur l’utilisation du fournisseur d’environnement pour gérer les variables d’environnement, consultez about_Environment_Provider.
Utiliser les méthodes System.Environment
La classe System.Environment fournit les méthodes et SetEnvironmentVariable()
les GetEnvironmentVariable()
méthodes permettant d’obtenir et de modifier des variables d’environnement.
L’exemple suivant crée une variable d’environnement, Foo
avec une valeur de Bar
, puis retourne sa valeur.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
Vous pouvez supprimer une variable d’environnement avec la SetEnvironmentVariable()
méthode en spécifiant une chaîne vide pour la valeur de la variable. Par exemple, pour supprimer la variable d’environnement Foo
:
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
Pour plus d’informations sur les méthodes de la classe System.Environment , consultez Méthodes d’environnement.
Créer des variables d’environnement persistantes dans Windows
Sur Windows, il existe trois méthodes pour apporter une modification persistante à une variable d’environnement :
- Définissez-les dans votre profil
- Utilisation de la
SetEnvironmentVariable()
méthode - Utiliser l’Panneau de configuration système
Définir des variables d’environnement dans votre profil
Toute variable d’environnement que vous ajoutez ou modifiez dans votre profil PowerShell est disponible dans n’importe quelle session qui charge votre profil. Cette méthode fonctionne pour n’importe quelle version de PowerShell sur n’importe quelle plateforme prise en charge.
Par exemple, pour créer la CompanyUri
variable d’environnement et mettre à jour la Path
variable d’environnement pour inclure le C:\Tools
dossier, ajoutez les lignes suivantes à votre profil PowerShell :
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
Remarque
Sur Linux ou macOS, le signe deux-points (:
) est utilisé au lieu d’un point-virgule (;
) pour séparer un nouveau chemin d’accès du chemin d’accès qui l’précède dans la liste.
Vous pouvez obtenir le chemin d’accès à votre profil PowerShell avec la $PROFILE
variable automatique. Pour plus d’informations sur les profils, consultez about_Profiles.
Définir des variables d’environnement avec SetEnvironmentVariable()
Sur Windows, vous pouvez spécifier une étendue pour la SetEnvironmentVariable()
méthode en tant que troisième paramètre pour définir la variable d’environnement dans cette étendue. La machine et les étendues utilisateur sont conservées en dehors du processus actuel, ce qui vous permet d’enregistrer une variable d’environnement nouvelle ou modifiée.
Par exemple, pour enregistrer une nouvelle variable Foo
d’environnement avec la valeur Bar
dans l’étendue de l’ordinateur :
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Vous pouvez supprimer une variable d’environnement de l’étendue de l’utilisateur ou de l’ordinateur en définissant la valeur de la variable sur une chaîne vide.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Définir des variables d’environnement dans le système Panneau de configuration
Dans la Panneau de configuration système, vous pouvez ajouter ou modifier des variables d’environnement existantes dans les étendues Utilisateur et Système (Machine). Windows écrit ces valeurs dans le Registre afin qu’elles persistent entre les sessions et les redémarrages du système.
Pour apporter une modification persistante à une variable d’environnement sur Windows à l’aide du système Panneau de configuration :
- Ouvrez le Panneau de configuration système.
- Sélectionnez Système.
- Sélectionnez Paramètres système avancés.
- Accédez à l’onglet Avancé .
- Sélectionnez Variables d’environnement....
- Effectuez vos modifications.
Créer des variables d’environnement persistantes sur des plateformes non-Windows
Linux et macOS ont des fichiers de configuration et des scripts que le système d’exploitation utilise pour définir des variables d’environnement avant de démarrer une application.
Lors de l’exécution de PowerShell comme interpréteur de commandes par défaut (connexion), vous pouvez définir des variables d’environnement dans les fichiers d’initialisation globaux pris en charge par le système d’exploitation. Par exemple, sur Linux, vous pouvez ajouter des variables d’environnement au /etc/environment
fichier ou créer un script qui définit des variables d’environnement et le placer dans le /etc/profile.d
dossier. Sur macOS, vous pouvez ajouter des variables d’environnement au /etc/profile
fichier.
Lors du démarrage de PowerShell à partir d’un autre interpréteur de commandes, vous pouvez définir des variables d’environnement dans les fichiers d’initialisation spécifiques à l’interpréteur de commandes utilisés par des interpréteurs de commandes non-connexion, tels que ~/.bashrc
pour bash
ou ~/.zshrc
pour zsh
.
Pour plus d’informations, consultez la documentation de votre système d’exploitation et de votre interpréteur de commandes par défaut.
Variables d’environnement PowerShell
Les fonctionnalités PowerShell peuvent utiliser des variables d’environnement pour stocker les préférences utilisateur. Ces variables fonctionnent comme des variables de préférence, mais elles sont héritées par les sessions enfants des sessions dans lesquelles elles sont créées. Pour plus d’informations sur les variables de préférence, consultez about_Preference_Variables.
Les variables d’environnement qui stockent les préférences sont les suivantes :
POWERSHELL_TELEMETRY_OPTOUT
Pour désactiver la télémétrie, définissez la variable d’environnement sur
true
,yes
ou1
. Pour plus d’informations, consultez about_Telemetry.Pour que cette variable d’environnement ait effet, elle doit être définie avant de démarrer le processus PowerShell. Pour plus d’informations sur la création de variables d’environnement persistantes, consultez les sections précédentes.
POWERSHELL_DISTRIBUTION_CHANNEL
À compter de PowerShell 7.2, cette variable d’environnement est définie par les packages d’installation pour enregistrer la méthode et la source d’installation pour PowerShell.
Ces informations sont incluses dans les données de télémétrie envoyées à Microsoft. Les utilisateurs ne doivent pas modifier cette valeur.
POWERSHELL_UPDATECHECK
Le comportement de notification de mise à jour peut être modifié à l’aide de la variable d’environnement
POWERSHELL_UPDATECHECK
. Pour plus d’informations, consultez about_Update_Notifications.Les valeurs suivantes sont prises en charge :
Off
désactive la fonctionnalité de notification de mise à jourDefault
est identique à ne pas définirPOWERSHELL_UPDATECHECK
:- Les versions en disponibilité générale (GA) informent des mises à jour des versions GA
- La préversion/les versions finales (RC) informent des mises à jour des versions en disponibilité générale (GA) et des préversions.
LTS
avertit uniquement les mises à jour des versions en disponibilité générale à long terme (LTS)
Les valeurs non par défaut de la variable d’environnement doivent être définies avant de démarrer le processus PowerShell. Pour plus d’informations sur la création de variables d’environnement persistantes, consultez les sections précédentes.
PSExecutionPolicyPreference
Stocke la stratégie d’exécution définie pour la session active. Cette variable d’environnement n’existe que lorsque vous définissez une stratégie d’exécution pour une seule session. Vous pouvez le faire de deux façons différentes.
Démarrez une session à partir de la ligne de commande à l’aide du paramètre ExecutionPolicy pour définir la stratégie d’exécution de la session.
Utilisez l'applet de commande
Set-ExecutionPolicy
. Utilisez le paramètre Scope avec la valeurProcess
.Définissez manuellement la variable d’environnement. La modification de la valeur de cette variable modifie la stratégie d’exécution du processus actuel.
Ces informations s’appliquent uniquement à la plateforme Windows. Pour plus d'informations, voir about_Execution_Policies.
PSModulePath
La
$env:PSModulePath
variable d’environnement contient une liste d’emplacements de dossiers qui sont recherchés pour rechercher des modules et des ressources. Sur Windows, la liste des emplacements de dossiers est séparée par le caractère semi-deux-points (;
). Sur les plateformes non-Windows, le signe deux-points (:
) sépare les emplacements des dossiers dans la variable d’environnement.Par défaut, les emplacements effectifs auxquels ils sont affectés
$env:PSModulePath
sont les suivants :Emplacements à l’échelle du système : ces dossiers contiennent des modules fournis avec PowerShell. Les modules sont magasins à l’emplacement
$PSHOME\Modules
. En outre, il s’agit de l’emplacement où sont installés les modules de gestion Windows.Modules installés par l’utilisateur : il s’agit de modules installés par l’utilisateur.
Install-Module
a un paramètre Scope qui vous permet de spécifier si le module est installé pour l’utilisateur actuel ou pour tous les utilisateurs. Pour plus d’informations, consultez Install-Module.- Sur Windows, l’emplacement de l’étendue CurrentUser spécifique à l’utilisateur est le
$HOME\Documents\PowerShell\Modules
dossier. L’emplacement de l’étendue AllUsers est$env:ProgramFiles\PowerShell\Modules
. - Sur les systèmes non-Windows, l’emplacement de l’étendue CurrentUser spécifique à l’utilisateur est le
$HOME/.local/share/powershell/Modules
dossier. L’emplacement de l’étendue AllUsers est/usr/local/share/powershell/Modules
.
- Sur Windows, l’emplacement de l’étendue CurrentUser spécifique à l’utilisateur est le
En outre, les programmes d’installation qui installent des modules dans d’autres répertoires, tels que le répertoire Program Files, peuvent ajouter leurs emplacements à la valeur de
$env:PSModulePath
.Pour plus d’informations, consultez about_PSModulePath.
PSModuleAnalysisCachePath
PowerShell fournit un contrôle sur le fichier utilisé pour mettre en cache des données sur les modules et leurs applets de commande. Le cache est lu au démarrage lors de la recherche d’une commande et est écrit sur un thread d’arrière-plan parfois après l’importation d’un module.
L’emplacement par défaut du cache est :
- Windows PowerShell 5.1 :
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
- PowerShell 6.0 et versions ultérieures :
$env:LOCALAPPDATA\Microsoft\PowerShell
- Valeur par défaut non Windows :
~/.cache/powershell
Le nom de fichier par défaut du cache est
ModuleAnalysisCache
. Lorsque plusieurs instances de PowerShell sont installées, le nom de fichier inclut un suffixe hexadécimal afin qu’il existe un nom de fichier unique par installation.Remarque
Si la découverte de commandes ne fonctionne pas correctement, par exemple IntelliSense affiche les commandes qui n’existent pas, vous pouvez supprimer le fichier cache. Le cache est recréé la prochaine fois que vous démarrez PowerShell.
Pour modifier l’emplacement par défaut du cache, définissez la variable d’environnement avant de démarrer PowerShell. La valeur doit nommer un chemin complet (y compris le nom de fichier) où PowerShell est autorisé à créer et à écrire des fichiers.
Les modifications apportées à cette variable d’environnement affectent uniquement les processus enfants. Pour plus d’informations sur la création de variables d’environnement persistantes, consultez les sections précédentes.
Pour désactiver le cache de fichiers, vous pouvez affecter à cette valeur un emplacement non valide, par exemple :
# `NUL` here is a special device on Windows that can't be written to, # on non-Windows you would use `/dev/null` $env:PSModuleAnalysisCachePath = 'NUL'
Cela définit le chemin d’accès à l’appareil NUL . PowerShell ne peut pas écrire dans le chemin d’accès, mais aucune erreur n’est retournée. Vous pouvez voir les erreurs signalées à l’aide d’un traceur :
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
- Windows PowerShell 5.1 :
PSDisableModuleAnalysisCacheCleanup
Lors de l’écriture du cache d’analyse de module, PowerShell recherche les modules qui n’existent plus pour éviter un cache inutilement volumineux. Parfois, ces vérifications ne sont pas souhaitables, auquel cas vous pouvez les désactiver en définissant cette valeur
1
de variable d’environnement sur .La définition de cette variable d’environnement prend effet pour les événements de nettoyage suivants dans le processus actuel. Pour vous assurer que le nettoyage est désactivé au démarrage, vous devez définir la variable d’environnement avant de démarrer PowerShell. Pour plus d’informations sur la création de variables d’environnement persistantes, consultez les sections précédentes.
Autres variables d’environnement utilisées par PowerShell
Informations sur le chemin d’accès
PATH
La
$env:PATH
variable d’environnement contient une liste d’emplacements de dossiers que le système d’exploitation recherche dans les fichiers exécutables. Sur Windows, la liste des emplacements de dossiers est séparée par le caractère semi-deux-points (;
). Sur les plateformes non-Windows, le signe deux-points (:
) sépare les emplacements des dossiers dans la variable d’environnement.PATHEXT
La
$env:PATHEXT
variable contient une liste d’extensions de fichiers que Windows considère comme des fichiers exécutables. Lorsqu’un fichier de script avec l’une des extensions répertoriées est exécuté à partir de PowerShell, le script s’exécute dans la console ou la session de terminal actuelle. Si l’extension de fichier n’est pas répertoriée, le script s’exécute dans une nouvelle session de console.Pour vous assurer que les scripts d’un autre langage de script s’exécutent dans la session de console active, ajoutez l’extension de fichier utilisée par le langage de script. Par exemple, pour exécuter des scripts Python dans la console actuelle, ajoutez l’extension
.py
à la variable d’environnement. Pour que Windows prend en charge l’extension.py
en tant que fichier exécutable, vous devez inscrire l’extension de fichier à l’aideftype
des commandes etassoc
commandes de l’interpréteur de commandes CMD. PowerShell n’a aucune méthode directe pour inscrire le gestionnaire de fichiers. Pour plus d’informations, consultez la documentation de la commande ftype .Les scripts PowerShell démarrent toujours dans la session de console active. Vous n’avez pas besoin d’ajouter l’extension
.PS1
.Variables
XDG
Sur les plateformes non Windows, PowerShell utilise les variables d’environnement XDG suivantes, telles que définies par la spécification du répertoire de base XDG.
XDG_CONFIG_HOME
XDG_DATA_HOME
XDG_CACHE_HOME
Fonctionnalités de terminal
À compter de PowerShell 7.2, les variables d’environnement suivantes peuvent être utilisées pour contrôler les fonctionnalités de terminal virtuel telles que les séquences d’échappement ANSI qui colorisent la sortie. La prise en charge des séquences d’échappement ANSI peut être désactivée à l’aide des variables d’environnement ou NO_COLOR
des variables d’environnementTERM
.
TERM
Les valeurs suivantes de
$env:TERM
modifient le comportement comme suit :dumb
-Studios$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Studios$PSStyle.OutputRendering = PlainText
xtermm
-Studios$PSStyle.OutputRendering = PlainText
NO_COLOR
S’il
$env:NO_COLOR
existe, la$PSStyle.OutputRendering
valeur est définiePlainText
sur . Pour plus d’informations sur la variable d’environnementNO_COLOR
, consultez https://no-color.org/.