874 votes

Définition des variables d'environnement de Windows PowerShell

J'ai découvert que la définition de la variable d'environnement PATH n'affecte que l'ancienne invite de commande. PowerShell semble avoir des paramètres d'environnement différents. Comment puis-je modifier les variables d'environnement pour PowerShell (v1) ?

Nota:

Je veux rendre mes changements permanents, pour ne pas avoir à les définir à chaque fois que j'exécute PowerShell. Est-ce que PowerShell a un fichier de profil ? Quelque chose comme le profil Bash sous Unix ?

1 votes

J'aimerais avoir un profil central situé sur un partage de fichiers. La synchronisation est un problème. La création d'un stub profile avec . \\computer\share\path\Profile.ps1 semble être une astuce (essayez Notepad $Profile). Ce serait bien s'il y avait un moyen de changer de façon permanente la variable automatique $Profile.

5 votes

Pas d'environnement PATH fait affectent également l'invite de commande powershell. Ce qui diffère cependant, c'est que powershell n'accepte pas les chemins entre guillemets. Solution : supprimez tous les guillemets ( " ) dans la variable d'environnement chemin

4 votes

SI VOUS ATTEIGNEZ ICI POUR PS > v1... Suite au commentaire de Nilzor ci-dessus : Utilisez ceci pour supprimer tous les " des chemins dans la variable d'environnement PATH pour votre session : $($Env:PATH).Split(';') | %{ $str += "$($_.Trim('"'));" }; $Env:PATH=$str

777voto

mloskot Points 13971

Si, à un moment donné au cours d'une session PowerShell, vous avez besoin de ajouter temporairement à la variable d'environnement PATH, vous pouvez le faire de cette manière :

$env:Path += ";C:\Program Files\GnuWin32\bin"

Si vous avez besoin que votre chemin soit appelé avant le chemin standard, insérez-le au début.

$env:Path = "C:\Program Files\GnuWin32\bin;$env:Path"

4 votes

+1 : : Cette ligne unique est très efficace pour les invocations basées sur la session comme avec mingw ... I.E. $env:PATH += ";c : \MinGW\msys\1.0\bin " ^ {quelque mingw bin ... }

3 votes

Et comment supprimer un chemin ?

0 votes

@becko pose une nouvelle question sur le SO. Il s'agit spécifiquement de réglage variable env.

722voto

JaredPar Points 333733

La modification des variables d'environnement réelles peut être effectuée en utilisant le env: namespace / drive informations. Par exemple, ce code va mettre à jour la variable d'environnement path :

$env:Path = "SomeRandomPath";             (replaces existing path) 
$env:Path += ";SomeRandomPath"            (appends to existing path)

Il existe des moyens de rendre les paramètres d'environnement permanents, mais mais si vous ne les utilisez que depuis PowerShell, il est probablement beaucoup mieux d'utiliser votre profil pour initier les paramètres. Au démarrage, PowerShell exécutera toute commande .ps1 qu'il trouve dans le WindowsPowerShell sous le dossier dossier Mes documents. En général, vous avez un profil.ps1 déjà présent. Le chemin sur mon ordinateur est

C:\Users\JaredPar\Documents\WindowsPowerShell\profile.ps1

51 votes

$profile est une variable automatique qui pointe vers votre profil utilisateur pour tous les hôtes PowerShell.

16 votes

Notez que (split-path $profile)(pour obtenir le dossier contenant) peut contenir plusieurs fichiers de profil : profile.ps1 doit être chargé par tous les hôtes, <host-name>_profile.ps1 seulement par l'hôte spécifié. Pour PowerShell.exe (hôte console), il s'agit de Microsoft.PowerShell_profile.ps1.

15 votes

Que faire si je n'ai pas de dossier WindowsPowerShell dans mes documents ? Dois-je créer le dossier et le fichier ? Que devrais-je mettre dans le fichier si je veux ajouter C:\path\to\file.ext aux variables d'environnement ? EDIT : je l'ai déjà trouvé. La réponse est oui, créez-le. Le fichier doit être composé d'une ligne : $env:path += ;C:\path\to\file.ext" .

420voto

hoge Points 479

Vous pouvez également modifier les variables d'environnement de l'utilisateur/du système en permanence (c'est-à-dire qu'il sera persistant à travers les redémarrages du shell) avec ce qui suit :

Modifier une variable d'environnement système

[Environment]::SetEnvironmentVariable
     ("Path", $env:Path, [System.EnvironmentVariableTarget]::Machine)

Modifier une variable d'environnement utilisateur

[Environment]::SetEnvironmentVariable
     ("INCLUDE", $env:INCLUDE, [System.EnvironmentVariableTarget]::User)

Utilisation à partir de commentaires - ajouter à la variable d'environnement du système

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) + ";C:\bin",
    [EnvironmentVariableTarget]::Machine)

Une solution basée sur les chaînes de caractères est également possible si vous ne voulez pas écrire les types.

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", "Machine")

8 votes

Cette fonction est très utile pour les systèmes à accès restreint.

20 votes

@AndresRiofrio, Oui, c'est permanent. Utilisation : [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", [EnvironmentVariableTartget::Machine) Vous ne verrez pas le résultat de cette modification tant que vous n'aurez pas lancé une nouvelle session powershell. Autrement dit, si vous inspectez $env:Path immédiatement après avoir exécuté cette commande, vous verrez ce que $env:Path était avant la commande. Pour mettre à jour, fermez et ouvrez le shell ou démarrez une nouvelle session.

7 votes

@FLGMwt vous avez une faute de frappe, la bonne est : [Environnement]::SetEnvironmentVariable("Path", $env:Path + " ; C:\bin ", [EnvironmentVariableTarget]::Machine)

82voto

tjb Points 2869

ATTENTION : sauvegardez une copie de votre chemin existant en faisant $env:path >> a.out dans une invite PowerShell, au cas où quelque chose se passerait mal.

A partir de l'invite PowerShell :

setx PATH "$env:path;\the\directory\to\add" -m

Vous devriez alors voir le texte :

SUCCESS: Specified value was saved.

Redémarrez votre session, et la variable sera disponible. setx peut également être utilisé pour définir des variables arbitraires. Type setx /? à l'invite pour la documentation.

5 votes

Il semble qu'elle ne fonctionne que si elle est exécutée en tant qu'administrateur, et qu'elle ne prenne effet que pour les consoles PowerShell exécutées en tant qu'administrateur, et non pour celles qui sont exécutées régulièrement.

1 votes

17 votes

Aïe - je viens de me heurter à la limite de 1024 caractères de setx ; heureusement, j'ai suivi le conseil d'enregistrer la valeur existante de $end:Path. C'est juste quelque chose dont il faut être conscient : superuser.com/questions/387619/

4voto

Paul Rowland Points 4045

Dans les extensions communautaires PowerShell (pscx), vous disposez des éléments suivants ;

Pour des conseils sur l'installation de pscx, voir cette réponse

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X