Utiliser PowerShell pour définir des variables d’environnement Windows, lire les variables d’environnement et créer de nouvelles variables d’environnement est facile une fois que vous connaissez l’astuce. Les astuces que vous apprendrez dans cet article fonctionneront pour les variables d’environnement de Windows 10 ainsi que pour n’importe quel client/serveur Windows après Windows 7 SP1/Windows Server 2008.
PowerShell offre de nombreuses façons différentes d’interagir avec les variables d’environnement Windows à partir du PSDrive $env:
, du registre et de la classe [System.Environment]
de .NET. Vous apprendrez chaque méthode, y compris la compréhension de la portée des variables d’environnement, dans cette démonstration étape par étape.
Hypothèses
Tout au long de cet article, j’utiliserai Windows PowerShell 5.1 sur Windows 10. Mais si vous avez une version de Windows PowerShell supérieure à v3 sur Windows 7 SP1 ou ultérieur, les techniques que je m’apprête à vous montrer devraient fonctionner parfaitement.
Qu’est-ce que les variables d’environnement ?
Les variables d’environnement, comme leur nom l’indique, stockent des informations sur l’environnement utilisé par Windows et les applications. Les variables d’environnement peuvent être accédées par des applications graphiques telles que Windows Explorer et des éditeurs de texte simples comme Notepad, ainsi que par cmd.exe et PowerShell.
L’utilisation de variables d’environnement vous permet d’éviter la codification en dur des chemins d’accès aux fichiers, des noms d’utilisateurs ou d’ordinateurs, et bien plus encore, dans vos scripts ou modules PowerShell.
Variables d’environnement courantes
Au fur et à mesure que vous apprenez à travailler avec les variables d’environnement dans PowerShell, vous rencontrerez de nombreuses variables différentes. Certaines sont plus utiles que d’autres. Voici une liste de certaines des variables d’environnement courantes et de leur utilisation à titre de référence.
Variable | Usage |
---|---|
ClientName | The name of the remote computer connected via a Remote Desktop session. |
SessionName | This helps to identify if the current Windows session is regarded by the operating system as running at the console. For console sessions SessionName will be ‘Console’. Enhanced Session connections to Hyper-V Virtual Machines do not report SessionName as ‘Console’, whereas Standard Sessions do. |
ComputerName | The name of the computer. |
SystemRoot and Windir | The path to the current Windows installation. |
ProgramFiles and ProgramFiles(x86) | The default locations for x64 and x86 programs. |
ProgramW6432 | The default location for programs, avoiding 32/64 bit redirection. This variable only applies for 32 bit processes running on a 64 bit platform. This means that you can use it to identify when a 32 bit instance of PowerShell is running on a 64 bit system. |
UserDNSDomain | The Fully Qualified Domain Name of the Active Directory domain that the current user logged on to. Only present for domain logons. |
UserDomain | The NETBIOS-style name of the domain that the current user logged on to. Can be a computer name if there’s no domain. |
UserDomainRoamingProfile | The location of the central copy of the roaming profile for the user, if any. Only present for domain logons. |
UserName | The name of the currently logged on user. |
UserProfile | The location of the profile of the current user on the local computer. |
Portée des variables d’environnement
Il existe trois portées de variables d’environnement. Pensez aux portées comme des couches de variables qui s’accumulent pour donner une image complète. Ensemble, ces « couches » fournissent de nombreuses variables d’environnement différentes à tout processus en cours d’exécution dans Windows.
Hiérarchie de la portée des variables d’environnement
Chacune de ces « couches » se combine ou s’écrase mutuellement. Elles sont définies dans une hiérarchie telle que : machine -> utilisateur -> processus, chaque variable de portée écrasant la variable parent si une variable parent existe dans la portée parente.
Par exemple, une variable d’environnement courante est TEMP
. Cette variable stocke le chemin d’accès au dossier temporaire local de Windows. Cette variable d’environnement est définie comme suit :
C:\WINDOWS\TEMP
in the machine scopeC:\Users\<username>\AppData\Local\Temp
in the user scopeC:\Users\<username>\AppData\Local\Temp
in the process scope.
Si aucune variable d’environnement TEMP
n’est définie dans la portée utilisateur, le résultat final sera C:\WINDOWS\TEMP
.
Types de portée des variables d’environnement
Il existe trois types de portée différentes pour les variables d’environnement sous Windows.
Machine
Les variables d’environnement dans la portée machine sont associées à l’instance en cours d’exécution de Windows. Tout compte utilisateur peut les lire, mais les définir, les modifier ou les supprimer nécessite des privilèges élevés.
Utilisateur
Les variables d’environnement dans la portée utilisateur sont associées à l’utilisateur qui exécute le processus en cours. Les variables utilisateur écrasent les variables de portée machine- ayant le même nom.
Note : Microsoft recommande que les valeurs des variables d’environnement de portée Machine et Utilisateur ne dépassent pas 2048 caractères.
Processus
Les variables d’environnement dans la portée processus sont une combinaison des portées machine et utilisateur, ainsi que certaines variables créées dynamiquement par Windows.
Ci-dessous se trouve une liste des variables d’environnement disponibles pour un processus en cours d’exécution. Toutes ces variables sont créées dynamiquement.
ALLUSERSPROFILE
APPDATA
COMPUTERNAME
HOMEDRIVE
HOMEPATH
LOCALAPPDATA
LOGONSERVER
PROMPT
PUBLIC
SESSION
SystemDrive
SystemRoot
USERDNSDOMAIN
USERDOMAIN
USERDOMAIN_ROAMINGPROFILE
USERNAME
USERPROFILE
Variables d’environnement dans le Registre
Les variables d’environnement sont stockées dans deux emplacements du registre, l’un pour la portée utilisateur et l’autre pour la portée machine.
Ne pas utiliser le registre pour gérer les variables d’environnement
Il y a un problème lors de la modification des variables à l’intérieur du registre. Les processus en cours d’exécution ne verront pas les modifications des variables dans le registre. Les processus ne voient que les variables et les valeurs du registre qui étaient présentes lors du démarrage du processus, à moins que Windows ne les informe d’un changement.
Au lieu de modifier directement le registre, vous pouvez utiliser une classe .NET à la place. La classe .NET [System.Environment]
peut modifier les variables d’environnement à portée machine et utilisateur–et gérer l’entretien du registre pour vous.
Modifier directement les variables d’environnement dans le registre, bien que possible, n’a pas de sens. La classe .NET offre une approche plus simple et prise en charge par Microsoft. Vous apprendrez à utiliser la classe .NET [System.Environment]
plus tard dans cet article.
Emplacements du registre des variables d’environnement et requête
I hope you’ve been convinced to not modify the registry directly but if you’d like to take a peek at what’s in there, you can find all user environment variables in the HKEY_CURRENT_USER\Environment
key. Machine-scoped environment variables are stored at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
.
À l’intérieur de l’une de ces clés se trouvent des valeurs de registre de type REG_SZ
ou REG_EXPAND_SZ
. Les valeurs REG_EXPAND_SZ
contiennent des variables d’environnement intégrées à leur valeur. Ces variables d’environnement sont développées lorsque la valeur est récupérée.
Pour le démontrer, utilisez l’utilitaire REG
. Il s’agit d’un petit utilitaire en ligne de commande inclus avec Windows.
Interrogez la variable d’environnement TEMP
comme indiqué ci-dessous. Exécutez REG
avec le paramètre QUERY
pour récupérer la valeur de la variable TEMP
.
Vous remarquerez parfois que les variables d’environnement sont affichées entre symboles de pourcentage (
%COMPUTERNAME%
) comme indiqué ci-dessus. Il s’agit de la méthode ancienne pour afficher les variables d’environnement via cmd.exe et les fichiers batch. Sachez que PowerShell ne reconnaît pas ce format.
L’utilitaire REG
nous permet de voir la valeur native de la valeur du registre. Le type de valeur est REG_EXPAND_SZ
et la valeur contient la variable d’environnement %USERPROFILE%
.
Si vous préférez utiliser PowerShell pour récupérer la valeur du registre, vous pouvez le faire en utilisant la cmdlet Get-Item
comme indiqué ci-dessous.
Afficher et définir les variables d’environnement Windows via l’interface graphique
Pour afficher une vue graphique des variables d’environnement utilisateur et système, exécutez SystemPropertiesAdvanced.exe à partir de PowerShell, d’une invite de commande ou en appuyant sur la touche Windows+R pour afficher l’onglet Propriétés système avancées. Cliquez sur le bouton Variables d’environnement, qui est mis en évidence dans l’image ci-dessous.

La boîte de dialogue Variables d’environnement, affichée ci-dessous, vous permet de voir, créer et modifier des variables d’environnement avec une portée utilisateur et machine. Notez que la boîte de dialogue fait référence aux variables à portée machine comme Variables système.

Maintenant que vous avez compris les variables d’environnement, passons à ce qui vous intéresse, les gérer avec PowerShell !
Il existe plusieurs façons différentes d’interagir avec les variables d’environnement en utilisant PowerShell.
- Le
Env:
PSDrive et Provider – basé sur la session. Il ne définit que les valeurs des variables d’environnement pour la session PowerShell en cours - Les variables
$env:
– basées sur la session. Il ne définit que les valeurs des variables d’environnement pour la session PowerShell en cours - La classe .NET
[System.Environment]
– vous permet de persister les variables d’environnement à portée utilisateur et système entre les sessions et les redémarrages
Le Env:
PSDrive et Provider
L’une des meilleures façons de lire les variables d’environnement est un concept PowerShell connu sous le nom de lecteurs PowerShell (PS drives). Un lecteur PS vous permet de traiter les variables d’environnement comme s’il s’agissait d’un système de fichiers via le lecteur Env:
.
Basculer vers le lecteur Env:
Comme tous les lecteurs PS, vous y faites référence via des chemins comme Env:\TEMP
, Env:\COMPUTERNAME
, etc. Mais pour gagner du temps, basculez vers le lecteur Env:
comme vous le feriez avec un lecteur de système de fichiers, comme indiqué ci-dessous.
Auto-complétion avec le lecteur Env:
Vous pouvez utiliser les mêmes commandes que celles utilisées pour accéder à un système de fichiers, telles que Get-Item
et Get-ChildItem
pour accéder aux variables d’environnement. Mais au lieu du système de fichiers, vous lisez le lecteur Env:
.
Étant donné que les variables d’environnement sont stockées dans un lecteur PS, vous pouvez utiliser la fonction de complétion automatique de PowerShell pour parcourir les variables disponibles, comme indiqué ci-dessous.

Passons maintenant à quelques exemples d’utilisation du lecteur PS Env:
pour travailler avec les variables d’environnement.
Liste des variables d’environnement avec Env:
Liste des variables d’environnement en utilisant un joker avec Env:
Recherche des valeurs des variables d’environnement avec Env:
Les résultats de ces commandes sont des objets .NET [System.Collections.DictionaryEntry]
clé/valeur. Ces objets contiennent le nom de la variable d’environnement dans la propriété Name
et la valeur dans la propriété Value
.
Vous pouvez accéder à une valeur spécifique d’une variable d’environnement en enveloppant la référence de la commande Get-Item
entre parenthèses et en faisant référence à la propriété Value
comme indiqué ci-dessous :
Dans les situations où vous devez uniquement retourner certaines variables d’environnement, utilisez des cmdlets PowerShell standard tels que Select-Object
et Where-Object
pour sélectionner et filtrer les objets renvoyés par le fournisseur Env:
.
Dans l’exemple ci-dessous, seule la variable d’environnement COMPUTERNAME
est renvoyée.
Comme méthode alternative, utilisez la cmdlet Get-Content
. Cette cmdlet renvoie un objet [String]
contenant la valeur de la variable d’environnement. Cet objet est plus simple à manipuler car il ne renvoie que la valeur, plutôt qu’un objet avec les propriétés Name
et Value
.
Démonstration : insertion de valeurs d’environnement dans une chaîne de caractères
Avec Get-Content
, vous pouvez trouver la valeur d’une variable d’environnement et insérer la variable d’environnement COMPUTERNAME
, par exemple, dans une chaîne de texte.
Définition d’une variable d’environnement (et création) avec Env:
Créez de nouvelles variables d’environnement avec PowerShell en utilisant la cmdlet New-Item
. Fournissez le nom de la variable d’environnement sous la forme Env:\<NomVariableEnv>
pour la valeur Name
et la valeur de la variable d’environnement pour le paramètre Value
, comme indiqué ci-dessous.
Utilisez la commande Set-item
pour définir une variable d’environnement, ou en créer une nouvelle si elle n’existe pas déjà. Vous pouvez voir ci-dessous qu’en utilisant la commande Set-Item
, vous pouvez à la fois créer ou modifier une variable d’environnement.
Copier une variable d’environnement avec Env:
Parfois, il arrive que vous ayez besoin de reproduire la valeur d’une variable d’environnement. Vous pouvez le faire en utilisant la commande Copy-Item
.
Vous pouvez voir ci-dessous que la valeur de la variable COMPUTERNAME
est copiée dans MYCOMPUTER
, en écrasant sa valeur existante.
Supprimer une variable d’environnement avec Env:
Il peut arriver que vous n’ayez plus besoin d’une variable d’environnement. Vous pouvez supprimer les variables d’environnement en utilisant l’une des trois méthodes suivantes :
- Utiliser la commande
Set-Item
pour définir une variable d’environnement avec une valeur vide
- Utiliser la commande
Remove-Item
.
- Utiliser la commande
Clear-Item
.
Renommer une variable d’environnement avec Env:
Dans les situations où le nom d’une variable d’environnement doit être modifié, vous avez la possibilité de la renommer plutôt que de la supprimer et de la recréer avec le fournisseur Env:
.
Utilisez la cmdlet Rename-Item
pour changer le nom d’une variable d’environnement tout en conservant sa valeur. Ci-dessous, vous pouvez voir que la variable MYCOMPUTER
est renommée en OLDCOMPUTER
tout en conservant sa valeur.
$Env:
Variables
Après avoir maîtrisé le lecteur Env:
pour traiter les variables d’environnement comme des fichiers, cette section vous montre comment les traiter comme des variables. Une autre façon de gérer les variables d’environnement dans la session est d’utiliser l’analyseur d’expressions PowerShellPowerShell Expression Parser. Cette fonctionnalité vous permet d’utiliser la portée $Env:
pour accéder aux variables d’environnement.
Obtenir une variable d’environnement avec $Env:
En utilisant la portée $Env
, vous pouvez référencer directement les variables d’environnement sans utiliser de commande comme Get-Item
comme indiqué ci-dessous.
Cette méthode facilite l’insertion de variables d’environnement dans des chaînes de caractères comme ci-dessous:
Définir ou créer une variable d’environnement avec $Env:
Définir une variable d’environnement en utilisant cette méthode est simple. Cela créera également une nouvelle variable d’environnement si elle n’existe pas déjà, comme indiqué ci-dessous.
Utilisez la syntaxe +=
pour ajouter à une valeur existante, plutôt que de l’écraser.
Supprimer une variable d’environnement avec $Env:
Pour supprimer une variable d’environnement en utilisant cette méthode, il suffit de définir sa valeur sur une chaîne vide.
Utilisant la classe .NET [System.Environment]
La classe .NET [System.Environment]
offre également des méthodes pour obtenir et définir des variables d’environnement. C’est la seule méthode pour accéder directement aux différents espaces d’environnement et définir des variables d’environnement qui survivent à travers les sessions PowerShell.
Dans tous les exemples suivants, si aucun espace n’est spécifié, l’espace de processus est supposé.
Lors de l’utilisation de [System.Environment]
, vous utiliserez quelques méthodes différentes de la classe statique .NET . Vous n’avez pas besoin de comprendre ce qu’est une méthode statique. Vous devez seulement comprendre que pour utiliser l’une des techniques que vous êtes sur le point d’apprendre, vous devez d’abord référencer la classe ([System.Environment]
) suivie de deux deux-points (::
) puis de la méthode.
Liste des variables d’environnement avec [System.Environment]
Si vous souhaitez voir toutes les variables d’environnement dans un espace particulier, vous utiliserez la méthode GetEnvironmentVariables
. Cette méthode renvoie toutes les variables d’environnement selon l’espace spécifié en tant qu’argument de la méthode (entre parenthèses).
Obtention de variables d’environnement individuelles avec [System.Environment]
Si vous devez trouver une variable d’environnement spécifique, vous pouvez le faire de deux manières différentes.
GetEnvironmentVariables().<nom de la variable>
– non recommandéGetEnvironmentVariable('<nom de la variable>','<portée>')
GetEnvironmentVariables()
En utilisant la méthode GetEnvironmentVariables()
, vous utilisez la notation point pour référencer la valeur. Entourez la référence de la classe et de la méthode statique [System.Environment]
entre parenthèses, suivie d’un point puis du nom de la variable d’environnement comme ci-dessous:
Notez que lorsque vous référencez des variables d’environnement de cette manière, vous devez vous assurer de respecter la casse ! Dans l’exemple ci-dessus, essayez de référencer la variable
APPDATA
en utilisantappdata
. Utilisez plutôt la méthodeGetEnvironmentVariable()
.
GetEnvironmentVariable()
Au lieu d’utiliser la méthode GetEnvironmentVariables()
, utilisez plutôt GetEnvironmentVariable()
pour trouver des variables d’environnement individuelles. Cela contourne le problème de la casse et vous permet également de spécifier la portée.
Pour utiliser cette méthode, spécifiez le nom de la variable d’environnement et la portée dans laquelle vous souhaitez rechercher cette variable, séparés par une virgule.
Définition d’une variable d’environnement avec [System.Environment]
Utilisez la méthode SetEnvironmentVariable()
pour définir la valeur d’une variable d’environnement pour la portée donnée, ou en créer une nouvelle si elle n’existe pas déjà.
Lors de la définition de variables dans la portée du processus, vous constaterez que la portée du processus est volatile tandis que les modifications apportées aux portées utilisateur et machine sont permanentes.
Remarque : Appeler la méthode SetEnvironmentVariable avec un nom de variable ou une valeur de 32767 caractères ou plus provoquera une exception.
Suppression d’une variable d’environnement avec [System.Environment]
Utilisez la méthode SetEnvironmentVariable()
pour supprimer une variable d’environnement pour la portée donnée en définissant sa valeur sur une chaîne vide.
Variables d’environnement PowerShell utiles
Comme de nombreuses autres applications Windows, PowerShell dispose de ses propres variables d’environnement. Deux variables d’environnement utiles à connaître sont PSExecutionPolicyPreference
et PSModulePath
.
PSExecutionPolicyPreference
La variable d’environnement PSExecutionPolicyPreference
stocke la stratégie d’exécution PowerShell actuelle. Elle est créée si une stratégie d’exécution PowerShell spécifique à la session est définie par :
- L’exécution de la cmdlet
Set-ExecutionPolicy
avec un paramètreScope
deProcess
- L’exécution de l’exécutable
powershell.exe
pour démarrer une nouvelle session, en utilisant le paramètre de ligne de commandeExecutionPolicy
pour définir une stratégie pour la session.
PSModulePath
La variable d’environnement PSModulePath
contient le chemin que PowerShell recherche pour les modules si vous ne spécifiez pas un chemin complet. Elle est formée de la même manière que la variable d’environnement standard PATH
, avec des chemins de répertoire individuels séparés par un point-virgule.
Astuce rapide : Divisez chaque dossier pour obtenir un tableau de chaînes afin de traiter chaque chemin individuellement en utilisant $env:PSModulePath.split(‘;’)
Résumé
Les variables d’environnement sont une méthode utile pour obtenir des informations sur un système en cours d’exécution ou stocker des informations entre les sessions et les redémarrages. Que vous lisiez les variables d’environnement par défaut du système d’exploitation Windows et que vous en créiez les vôtres, vous pouvez maintenant les gérer de différentes manières avec PowerShell !
Lectures complémentaires
- about_Environment_Variables
- La classe .NET [System.Environment] sur Microsoft docs
- Apprenez le format des chaînes PowerShell et l’expansion des chaînes
Source:
https://adamtheautomator.com/powershell-environment-variables/