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 :

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

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, 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 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'

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 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')

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 :

  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 :

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

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

    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.

    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 :

    • $env:LOCALAPPDATA\Microsoft\Windows\PowerShell

    Le nom de fichier par défaut du cache est ModuleAnalysisCache.

    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
    $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 pour les événements de propre up suivants dans le processus actuel. Pour vous assurer que propre up 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 (;).

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

Voir aussi