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

Utilisation de 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.

Utilisation des applets de commande Fournisseur d’environnement et Élément

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.

Utilisation des méthodes System.Environment

La classe System.Environment fournit les méthodes GetEnvironmentVariable et SetEnvironmentVariable pour obtenir et modifier des variables d’environnement.

L’exemple suivant crée une variable d’environnement, Fooavec 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 méthode SetEnvironmentVariable 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.

Enregistrement des modifications apportées aux variables d’environnement

Sur Windows, il existe trois méthodes pour apporter une modification persistante à une variable d’environnement : les définir dans votre profil, à l’aide de la méthode SetEnvironmentVariable et à l’aide du système Panneau de configuration.

Enregistrement 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.

Enregistrement de variables d’environnement avec SetEnvironmentVariable

Sur Windows, vous pouvez spécifier une étendue pour la méthode SetEnvironmentVariable 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 Bardans 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')

Enregistrement de variables d’environnement avec 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 :

  1. Ouvrez le Panneau de configuration système.
  2. Sélectionnez Système.
  3. Sélectionnez Advanced System Paramètres.
  4. Accédez à l’onglet Avancé .
  5. Sélectionnez Variables d’environnement....
  6. Effectuez vos modifications.

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, yesou 1.

    Pour plus d’informations, consultez about_Telemetry.

  • 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. Les valeurs suivantes sont admises :

    • Off désactive la fonctionnalité de notification de mise à jour
    • Default est identique à ne pas définir POWERSHELL_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)

    Pour plus d’informations, consultez about_Update_Notifications.

  • 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 valeur Process.

      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.

    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. Les modifications apportées à cette variable d’environnement affectent uniquement les processus enfants. La valeur doit nommer un chemin complet (y compris le nom de fichier) où PowerShell est autorisé à créer et à écrire des fichiers.

    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
    }
    
  • PSDisableModuleAnalysisCacheCleanup

    Lors de l’écriture du cache d’analyse de module, PowerShell case activée s pour les modules qui n’existent plus pour éviter un cache inutilement volumineux. Parfois, ces case activée ne sont pas souhaitables, auquel cas vous pouvez les désactiver en définissant cette valeur 1de variable d’environnement sur .

    La définition de cette variable d’environnement prend effet immédiatement dans le processus actuel.

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’aide ftype des commandes et assoc 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 avec les variables d’environnement TERM ou NO_COLOR.

  • TERME

    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 PlainText est définie sur PlainText. Pour plus d’informations sur la variable d’environnement NO_COLOR, consultez https://no-color.org/.

Voir aussi