Articles

A propos des variables d’environnement

  • 09/22/2020
  • 8 minutes de lecture
  • .

    • S
    • r
    • s
    • .

    • d
    • c
    • +1

SHORT DESCRIPTION

Décrit comment accéder aux variables d’environnement Windows dans PowerShell.

DISTRUCTION LONGUE

Les variables d’environnement stockent des informations sur l’environnement du système d’exploitation. Ces informations comprennent des détails tels que le chemin du système d’exploitation, le nombre de processeurs utilisés par le système d’exploitation et l’emplacementdes dossiers temporaires.

Les variables d’environnement stockent des données utilisées par le système d’exploitation et d’autres programmes. Par exemple, la variable d’environnement WINDIR contient l’emplacement du répertoire d’installation de Windows. Les programmes peuvent interroger la valeur de cette variable pour déterminer où se trouvent les fichiers du système d’exploitation Windows.

PowerShell peut accéder aux variables d’environnement et les gérer dans toutes les plates-formes de système d’exploitation prises en charge. Le fournisseur d’environnement PowerShell simplifie ceprocessus en facilitant l’affichage et la modification des variables d’environnement.

Les variables d’environnement, contrairement à d’autres types de variables dans PowerShell, sonthéritées par les processus enfants, tels que les tâches d’arrière-plan locales et les sessions dans lesquelles les membres du module s’exécutent. Cela rend les variables d’environnement bien adaptées pour stocker des valeurs qui sont nécessaires à la fois dans les processus parents et enfants.

Utilisation et modification des variables d’environnement

Sur Windows, les variables d’environnement peuvent être définies dans trois portées :

  • Portée de la machine (ou du système)
  • Portée de l’utilisateur
  • Portée du processus

La portée du 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 des scopes Machine etUser. Les plateformes basées sur Unix ne disposent que du scope Process.

Vous pouvez afficher et modifier les valeurs des variables d’environnement sans utiliser d’acmdlet en utilisant une syntaxe de variable avec le fournisseur d’environnement. Pour afficher la valeur d’une variable d’environnement, utilisez la syntaxe suivante :

$Env:<variable-name>

Par exemple, pour afficher la valeur de la variable d’environnement WINDIR, tapez la commande suivante à l’invite de commande PowerShell :

$Env:windir

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

Lorsque vous modifiez des variables d’environnement dans PowerShell, la modification n’affecte que la session en cours. Ce comportement ressemble à celui de la commande Set dans le Command Shell Windows et de la commande Setenv dans les environnements basés sur UNIX. Pour modifier les valeurs dans les portées Machine ou Utilisateur, vous devez utiliser les méthodes de la classe System.Environment.

Pour apporter des modifications aux variables de la portée Machine, il faut également avoir la permission. Si vous essayez de modifier une valeur sans autorisation suffisante, la commande échoue etPowerShell affiche une erreur.

Vous pouvez modifier les valeurs des variables sans utiliser un cmdlet en utilisant la syntaxe suivante :

$Env:<variable-name> = "<new-value>"

Par exemple, pour ajouter ;c:\temp à la valeur de la Path variable d’environnement, utilisez la syntaxe suivante :

$Env:Path += ";c:\temp"

Sur Linux ou macOS, les deux points (:) de la commande séparent le nouveau chemin du chemin qui le précède dans la liste.

$Env:PATH += ":/usr/local/temp"

Vous pouvez également utiliser les cmdlets Item, tels que Set-ItemRemove-Item etCopy-Item pour modifier les valeurs des variables d’environnement. Par exemple, pour utiliser le cmdlet Set-Item pour ajouter ;c:\temp à la valeur de la Path variable d’environnement, utilisez la syntaxe suivante :

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

Dans cette commande, la valeur est mise entre parenthèses afin qu’elle soit interprétée comme une unité.

Variables d’environnement qui stockent les préférences

Les fonctionnalités PowerShell peuvent utiliser des variables d’environnement pour stocker les préférences des utilisateurs.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, voir about_preference_variables.

Les variables d’environnement qui stockent les préférences incluent :

  • PSExecutionPolicyPreference

    Stocke la politique d’exécution définie pour la session actuelle. Cette variable d’environnement n’existe que lorsque vous définissez une politique d’exécution pour une seule session.Vous pouvez le faire de deux manières différentes.

    • Démarrer une session à partir de la ligne de commande en utilisant le paramètre ExecutionPolicyparameter pour définir la politique d’exécution pour la session.

    • Utiliser le cmdlet Set-ExecutionPolicy. Utilisez le paramètre Scope avec une valeur de « Process ».

      Pour plus d’informations, consultez about_Execution_Policies.

  • PSModuleAnalysisCachePath

    PowerShell permet de contrôler le fichier utilisé pour mettre en cache les données sur les modules et leurs cmdlets. Le cache est lu au démarrage lors de la recherche d’une commande et est écrit sur un thread d’arrière-plan quelque temps 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 plus : $env:LOCALAPPDATA\Microsoft\PowerShell
    • Non-Windows par défaut : ~/.cache/powershell

    Le nom de fichier par défaut pour le cache est ModuleAnalysisCache. Lorsque vous avezmultiples instances de PowerShell installées, le nom de fichier inclut un suffixehexadécimal afin qu’il y ait un nom de fichier unique par installation.

    Note

    Si la découverte des commandes ne fonctionne pas correctement, par exemple Intellisenses montre des commandes qui n’existent pas, vous pouvez supprimer le fichier de 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’environnementavant de démarrer PowerShell. Les modifications apportées à cette variable d’environnement n’affectent que les processus enfants. La valeur doit nommer un chemin complet (y compris le nom de fichier)que PowerShell a la permission de créer et d’écrire des fichiers.

    Pour désactiver le cache de fichiers, définissez cette valeur sur un emplacement invalide, forexample:

    # `NUL` here is a special device on Windows that cannot be written to,# on non-Windows you would use `/dev/null`$env:PSModuleAnalysisCachePath = 'NUL'

    Ceci définit le chemin d’accès au périphérique NUL. PowerShell ne peut pas écrire sur thepath mais aucune erreur n’est renvoyée. Vous pouvez voir les erreurs signalées en utilisant atracer:

    Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
  • PSDisableModuleAnalysisCacheCleanup

    Lors de l’écriture du cache d’analyse des modules, PowerShell vérifie les modules qui n’existent plus pour éviter un cache inutilement grand. Parfois, ces vérifications ne sont pas souhaitables, auquel cas vous pouvez les désactiver en définissant la valeur de cette variable d’environnement à 1.

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

  • PSModulePath

    La variable d’environnement $env:PSModulePath contient une liste d’emplacements de dossiers qui sont recherchés pour trouver des modules et des ressources.

    Par défaut, les emplacements effectifs attribués à $env:PSModulePath sont :

    • Lieux à l’échelle du système : Ces dossiers contiennent les modules livrés avecPowerShell. Les modules sont stockés dans l’emplacement $PSHOME\Modules. De plus,c’est l’emplacement où sont installés les modules de gestion de Windows.

    • Modules installés par l’utilisateur : Ce sont les modules installés par l’utilisateur.Install-Module possède 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, voir Install-Module.

      • Sur Windows, l’emplacement de la portée CurrentUser spécifique à l’utilisateur est le dossier $HOME\Documents\PowerShell\Modules. L’emplacement de l’étendueAllUsers est $env:ProgramFiles\PowerShell\Modules.
      • Sur les systèmes non-Windows, l’emplacement de l’étendue CurrentUserscope spécifique à l’utilisateur est le dossier $HOME/.local/share/powershell/Modules. L’emplacement du scope AllUsers est /usr/local/share/powershell/Modules.

    En outre, les programmes de configuration 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, voir about_PSModulePath.

Gestion des variables d’environnement

PowerShell fournit plusieurs méthodes différentes pour gérer les variables d’environnement.

  • Le lecteur de fournisseur d’environnement
  • Les cmdlets Item
  • La classe .NET System.Environment
  • Sur Windows, le panneau de configuration du système

Utilisation du fournisseur d’environnement

Chaque variable d’environnement est représentée par une instance de la classeSystem.Collections.DictionaryEntry. Dans chaque objet DictionaryEntry, le nom de la variable d’environnement est la clé du dictionnaire. La valeur de la variable est la valeur du dictionnaire.

Pour afficher les propriétés et les méthodes de l’objet qui représente une variable d’environnement dans PowerShell, utilisez la cmdlet Get-Member. Par exemple,pour afficher les méthodes et les propriétés de tous les objets du lecteur Env:,tapez:

Get-Item -Path Env:* | Get-Member

Le fournisseur d’environnement PowerShell vous permet d’accéder aux variables d’environnement dans un lecteur PowerShell (le lecteur Env:). Ce lecteur ressemble beaucoup à un lecteur de système de fichiers. Pour aller dans le Env: lecteur, tapez :

Set-Location Env:

Utiliser les cmdlets de contenu pour obtenir ou définir les valeurs d’une variable d’environnement.

PS Env:\> Set-Content -Path Test -Value 'Test value'PS Env:\> Get-Content -Path TestTest value

Vous pouvez afficher les variables d’environnement dans le lecteur Env: depuis n’importe quel autre lecteur PowerShell, et vous pouvez aller dans le lecteur Env: pour afficher et modifier les variables d’environnement.

Utilisation des cmdlets d’éléments

Lorsque vous faites référence à une variable d’environnement, tapez le Env: nom du lecteur suivi du nom de la variable. Par exemple, pour afficher la valeur de la variable d’environnementCOMPUTERNAME, tapez :

Get-ChildItem Env:Computername

Pour afficher les valeurs de toutes les variables d’environnement, tapez :

Get-ChildItem Env:

Parce que les variables d’environnement n’ont pas d’éléments fils, la sortie de Get-Itemet Get-ChildItem est la même.

Par défaut, PowerShell affiche les variables d’environnement dans l’ordre dans lequel il les récupère. Pour trier la liste des variables d’environnement par nom de variable,pipez la sortie d’une commande Get-ChildItem vers la cmdlet Sort-Object. Par exemple, depuis n’importe quel lecteur PowerShell, tapez :

Get-ChildItem Env: | Sort Name

Vous pouvez également aller dans le lecteur Env: en utilisant la cmdlet Set-Location :

Set-Location Env:

Lorsque vous êtes dans le Env: lecteur, vous pouvez omettre le Env: nom du lecteur dans thepath. Par exemple, pour afficher toutes les variables d’environnement, tapez :

PS Env:\> Get-ChildItem

Pour afficher la valeur de la variable COMPUTERNAME à partir du Env:lecteur, tapez :

PS Env:\> Get-ChildItem ComputerName

Enregistrer les modifications apportées aux variables d’environnement

Pour apporter une modification persistante à une variable d’environnement sous Windows, utilisez le Panneau de configuration du système. Sélectionnez Paramètres système avancés. Dans l’onglet Avancé, cliquez sur Variable d’environnement….. Vous pouvez ajouter ou modifier des variables d’environnement existantes dans les scopes Utilisateur et Système (Machine). Windows écrit ces valeurs dans le registre afin qu’elles persistent à travers les sessions et les redémarrages du système.

Alternativement, vous pouvez ajouter ou modifier les variables d’environnement dans votre profil PowerShell. Cette méthode fonctionne pour toute version de PowerShell sur toute plateforme prise en charge.

Utilisation des méthodes System.Environment

La classe System.Environment fournit des méthodes GetEnvironmentVariable etSetEnvironmentVariable qui vous permettent de spécifier la portée de lavariable.

L’exemple suivant utilise la méthode GetEnvironmentVariable pour obtenir le paramètre machine de PSModulePath et la méthode SetEnvironmentVariable pour ajouter le chemin C:\Program Files\Fabrikam\Modules à la valeur.

$path = ::GetEnvironmentVariable('PSModulePath', 'Machine')$newpath = $path + ';C:\Program Files\Fabrikam\Modules'::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

Pour plus d’informations sur les méthodes de la classe System.Environment, consultez la section Méthodes d’environnement.

SAISIR

  • Environnement (fournisseur)
  • à propos des modules

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *