Environnement PowerShell

Je suis compétent dans bash et j'ai du mal à comprendre l'environnement dans PowerShell. Existe-t-il un moyen équivalent à /usr/bin pour ajouter des exécutables à l'environnement? Comment l'environnement est-il représenté dans PowerShell – quel est son type?

Il n'y a absolument rien de spécial sur /usr/bin sur les systèmes de fichiers * nix, sauf qu'il s'agit d'un emplacement qui est dans la variable d'environnement PATH par défaut pour tous les utilisateurs. Windows a la même variable d'environnement, mais les seuls emplacements par défaut pour tous les utilisateurs sont des choses comme C:\Windows\System32 .

Vous pouvez utiliser System32 comme un dossier bin, mais vous pouvez également créer un nouveau dossier pour les bacs. C:\bin fonctionnerait, mais par défaut, il serait accessible par tous les utilisateurs afin que vous souhaitiez ajuster les autorisations, puis vous pouvez l'ajouter à la variable d'environnement PATH de l'ensemble de la machine afin que tous les utilisateurs puissent y débrancher facilement. Alternativement, considérez un dossier bin dans le répertoire de chaque utilisateur, avec son chemin dans la variable d'environnement PATH par utilisateur de l'utilisateur (lorsqu'une variable d'environnement est définie dans les magasins utilisateur et machine, elle est concaténée en utilisation réelle, première machine).

PowerShell met toutes les variables d'environnement dans un "lecteur" virtuel appelé Env: (similaire à C: pour les fichiers ou HKLM: pour la ruche de registre HKLM). En savoir plus à ce sujet ici: http://ss64.com/ps/syntax-env.html Vous pouvez accéder aux variables d'environnement via $env:<VARNAME> comme toute autre variable (le type est String) ; Par exemple, vous pouvez ajouter à PATH (note: les noms de variables d'environnement Windows sont insensibles à la casse) comme suit:

 $env:path = $env:path + ";C:\foo\bar\baz" 

Ce n'est que pour le processus actuel (et ses enfants). Si vous souhaitez stocker la valeur dans le registre afin qu'ils soient visibles pour d'autres processus, ou même pour d'autres utilisateurs (note: modifier les variables d'environnement qui affectent les autres utilisateurs nécessite des privilèges d'administrateur), la façon la plus simple dont je sais est d'utiliser les classes .NET PowerShell est essentiellement ".NETscript"). Par exemple, pour ajouter ce dossier à la variable d'environnement PATH de l'ensemble de la machine, vous feriez les tâches suivantes (en tant qu'Administrateur):

 [System.Environment]::SetEnvironmentVariable("path", $env:path + "C:\foo\bar\baz", "Machine") 

Le paramètre final est la représentation de chaîne d'une valeur dans l' énumération System.EnvironmentVariableTaget , telle qu'utilisée par System.Environment.SetEnvironmentVariable méthode statique .

Vous pouvez certainement créer un script / cmdlet qui simplifiera l'appel de cette fonction. Vous pouvez également utiliser la fonction statique [System.Environment]::GetEnvironmentVariable(name, [optional store]) pour lire les variables d'environnement directement à partir des magasins Utilisateur ou Machine. Encore une fois, toutes les variables d'environnement sont des chaînes (et lorsque vous en recevez une collection, c'est un dictionnaire).