J'ai découvert que la définition de la variable d'environnement PATH affecte uniquement l'ancienne invite de commande. PowerShell semble avoir différents paramètres d'environnement. Comment modifier les variables d'environnement pour PowerShell (v1)?
Remarque:
Je veux rendre mes modifications permanentes, donc je n'ai pas à les définir à chaque fois que j'exécute PowerShell. PowerShell a-t-il un fichier de profil? Quelque chose comme le profil Bash sur Unix?
windows
powershell
Vasil
la source
la source
"
) dans la variable d'environnement path$($Env:PATH).Split(';') | %{ $str += "$($_.Trim('"'));" }; $Env:PATH=$str
Réponses:
La modification des variables d'environnement réelles peut être effectuée à l'aide des
env: namespace / drive
informations. Par exemple, ce code mettra à jour la variable d'environnement path:Il existe des moyens de rendre les paramètres d'environnement permanents, mais si vous les utilisez uniquement à partir de PowerShell, il est probablement beaucoup mieux d'utiliser votre profil pour lancer les paramètres. Au démarrage, PowerShell exécutera tous les fichiers .ps1 qu'il trouve dans le
WindowsPowerShell
répertoire sous le dossier Mes documents. En général, vous avez déjà un fichier profile.ps1 . Le chemin sur mon ordinateur estla source
C:\path\to\file.ext
aux variables d'environnement? EDIT: l'a déjà trouvé. La réponse est oui, créez-le. Le fichier doit être constitué de 1 ligne:$env:path += ;C:\path\to\file.ext"
.$env:Path = "SomeRandomPath";
Au lieu de cela - voir @mloskot, ci-dessous.Si, à un moment donné au cours d'une session PowerShell, vous devez ajouter temporairement à la variable d'environnement PATH, vous pouvez le faire de cette façon:
la source
$env:Path = "C:\MyPath;$env:Path"
Vous pouvez également modifier les variables d'environnement utilisateur / système de manière permanente (c'est-à-dire qu'elles seront persistantes lors des redémarrages du shell) avec les éléments suivants:
Modifier une variable d'environnement système
Modifier une variable d'environnement utilisateur
Utilisation des commentaires - ajouter à la variable d'environnement système
Une solution basée sur les chaînes est également possible si vous ne voulez pas écrire de types
la source
[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 démarré 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, fermer et ouvrir le shell ou démarrer une nouvelle session.[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\bin", "User")
À partir de l'invite PowerShell:
Vous devriez alors voir le texte:
Redémarrez votre session et la variable sera disponible.
setx
peut également être utilisé pour définir des variables arbitraires. Tapezsetx /?
à l'invite de documentation.Avant de jouer avec votre chemin de cette manière, assurez-vous d'enregistrer une copie de votre chemin existant en le faisant
$env:path >> a.out
dans une invite PowerShell.la source
$env:PATH
abord, puissetx /m PATH "$env:PATH"
pour qu'il s'applique localement et globalement sans redémarrage du shell?Comme la réponse de JeanT , je voulais une abstraction autour de l'ajout au chemin. Contrairement à la réponse de JeanT, j'en avais besoin pour fonctionner sans interaction avec l'utilisateur. Autre comportement que je recherchais:
$env:Path
pour que le changement prenne effet dans la session en coursAu cas où cela serait utile, le voici:
Consultez mon essentiel pour la
Remove-EnvPath
fonction correspondante .la source
Bien que la réponse actuellement acceptée fonctionne dans le sens où la variable de chemin d'accès est mise à jour en permanence à partir du contexte de PowerShell, elle ne met pas à jour la variable d'environnement stockée dans le registre Windows.
Pour y parvenir, vous pouvez bien sûr également utiliser PowerShell:
Plus d'informations sont dans le billet de blog Utilisez PowerShell pour modifier votre chemin environnemental
Si vous utilisez des extensions de communauté PowerShell, la commande appropriée pour ajouter un chemin au chemin de variable d'environnement est:
la source
Toutes les réponses suggérant un changement permanent ont le même problème: elles cassent la valeur du registre de chemin.
SetEnvironmentVariable
transforme laREG_EXPAND_SZ
valeur%SystemRoot%\system32
enREG_SZ
valeur deC:\Windows\system32
.Toutes les autres variables du chemin sont également perdues. Ajouter de nouveaux en utilisant
%myNewPath%
ne fonctionnera plus.Voici un script
Set-PathVariable.ps1
que j'utilise pour résoudre ce problème:J'explique le problème plus en détail dans un article de blog .
la source
Cela définit le chemin de la session en cours et invite l'utilisateur à l'ajouter de façon permanente:
Vous pouvez ajouter cette fonction à votre profil par défaut, (
Microsoft.PowerShell_profile.ps1
), généralement situé dans%USERPROFILE%\Documents\WindowsPowerShell
.la source
En s'appuyant sur la réponse de @Michael Kropat, j'ai ajouté un paramètre pour ajouter le nouveau chemin à la
PATH
variable existante et une vérification pour éviter l'ajout d'un chemin inexistant:la source
Comme Jonathan Leaders l'a mentionné ici , il est important d'exécuter la commande / le script élevé pour pouvoir modifier les variables d'environnement pour 'machine' , mais l'exécution de certaines commandes élevées ne doit pas être effectuée avec les extensions de communauté, donc j'aimerais pour modifier et étendre la réponse de JeanT d' une manière, que les variables de machine changeantes peuvent également être effectuées même si le script lui-même n'est pas exécuté de manière élevée:
la source
La plupart des réponses ne concernent pas l' UAC . Cela couvre les problèmes UAC.
Installez d'abord les extensions de communauté PowerShell:
choco install pscx
via http://chocolatey.org/ (vous devrez peut-être redémarrer votre environnement shell).Activez ensuite pscx
Ensuite, utilisez
Invoke-Elevated
la source
Ma suggestion est celle-ci:
J'ai testé cela pour l'ajouter
C:\oracle\x64\bin
à la variable d'environnement enPath
permanence et cela fonctionne bien.La première consiste simplement à faire:
Mais ce changement n'est pas permanent.
$env:path
reviendra par défaut à ce qu'il était avant dès que vous fermez votre terminal PowerShell et que vous le rouvrez à nouveau. C'est parce que vous avez appliqué la modification au niveau de la session et non au niveau source (qui est le niveau du registre). Pour afficher la valeur globale de$env:path
, procédez comme suit:Ou plus précisément:
Maintenant, pour changer cela, nous capturons d'abord le chemin d'origine qui doit être modifié:
Nous définissons maintenant à quoi devrait ressembler le nouveau chemin. Dans ce cas, nous ajoutons un nouveau dossier:
Remarque: assurez-vous que l'
$newpath
apparence vous convient. Sinon, vous pourriez endommager votre système d'exploitation.Appliquez maintenant la nouvelle valeur:
Maintenant, vérifiez une dernière fois que cela ressemble à ce que vous attendez:
Vous pouvez maintenant redémarrer votre terminal PowerShell (ou même redémarrer la machine) et voir qu'il ne revient pas à son ancienne valeur.
Notez que l'ordre des chemins peut changer pour qu'il soit dans l'ordre alphabétique, alors assurez-vous de vérifier toute la ligne. Pour le rendre plus facile, vous pouvez diviser la sortie en lignes en utilisant le point-virgule comme délimiteur:
la source
Ouvrez PowerShell et exécutez:
la source
Dans PowerShell, on peut accéder au répertoire des variables d'environnement en tapant:
Cela vous amènera au répertoire Env:>. Depuis ce répertoire:
Pour voir toutes les variables d'environnement, tapez:
Pour voir une variable d'environnement spécifique, tapez:
Pour définir une variable d'environnement, tapez:
Pour supprimer une variable d'environnement, tapez:
Vous trouverez plus d'informations dans A propos des variables d'environnement .
la source
J'ai essayé d'optimiser un peu le code de SBF et Michael pour le rendre plus compact.
Je m'appuie sur la contrainte de type de PowerShell où il convertit automatiquement les chaînes en valeurs énumérées, donc je n'ai pas défini le dictionnaire de recherche.
J'ai également sorti le bloc qui ajoute le nouveau chemin à la liste en fonction d'une condition, de sorte que le travail soit effectué une fois et stocké dans une variable pour être réutilisé.
Il est ensuite appliqué en permanence ou simplement à la Session en fonction du
$PathContainer
paramètre.Nous pouvons mettre le bloc de code dans une fonction ou un fichier ps1 que nous appelons directement à partir de l'invite de commande. Je suis allé avec DevEnvAddPath.ps1.
Je fais quelque chose de similaire pour un DevEnvRemovePath.ps1.
Jusqu'à présent, ils semblent fonctionner.
la source
Seules les réponses qui poussent la valeur dans le Registre affectent une modification permanente (de sorte que la majorité des réponses sur ce fil, y compris la réponse acceptée, n'affectent pas définitivement le
Path
).La fonction suivante fonctionne pour les types
Path
/PSModulePath
etUser
/System
. Il ajoutera également le nouveau chemin d'accès à la session en cours par défaut.la source