223 votes

Rechargez le chemin dans PowerShell

Si j'ai une instance de PowerShell ISE en cours d'exécution et que j'installe quelque chose qui modifie le PATH ou que je le modifie de quelque manière que ce soit en dehors de PowerShell, je dois redémarrer PowerShell pour qu'il voie la variable PATH mise à jour.

Existe-t-il un moyen de recharger le chemin à partir de PowerShell sans le redémarrer ?

318voto

Mark Points 49079

Juste pour apporter Commentaire de Rob à la lumière :

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

85voto

Shay Levy Points 41404

Essayez de récupérer le chemin de la machine et de l'affecter au chemin de la session.

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")

49voto

Le moyen le plus simple est d'utiliser Chocolatey (freeware). Il fonctionne à la fois pour CMD et PowerShell. Vous pourrez alors recharger le PATH (avec l'expansion des variables) avec une simple commande :

refreshenv

Installation à partir de cmd (nécessite des droits d'administrateur) :

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

Exemple d'utilisation :

> SET JAVA_HOME=c:/java/jdk6
> SET PATH=%JAVA_HOME%/bin
> ECHO %PATH%
c:/java/jdk6/bin

> SET JAVA_HOME=c:/java/jdk8
> refreshenv
Refreshing environment variables from registry for cmd.exe. Please wait...Finished..
> echo %PATH%
c:/java/jdk8/bin

8voto

Tjaart Points 780

Sur la base de réponse de mpen voici une fonction PowerShell :

function refresh-path {
    $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") +
                ";" +
                [System.Environment]::GetEnvironmentVariable("Path","User")
}

Alors appelez simplement refresh-path .

8voto

Hashbrown Points 1888

Pour compléter les autres réponses, vous pouvez vous assurer que vous n'ajoutez pas de jointures superflues en filtrant au cas où l'utilisateur a un chemin vide.

$env:Path=(
    [System.Environment]::GetEnvironmentVariable("Path","Machine"),
    [System.Environment]::GetEnvironmentVariable("Path","User")
) -match '.' -join ';'

Ou, plus utilement, si vous exécutez un script qui ajoute à une ou plusieurs variables d'environnement, utilisez une fonction pour toutes les réinitialiser.

function resetEnv {
    Set-Item `
        -Path (('Env:', $args[0]) -join '') `
        -Value ((
            [System.Environment]::GetEnvironmentVariable($args[0], "Machine"),
            [System.Environment]::GetEnvironmentVariable($args[0], "User")
        ) -match '.' -join ';')
}
resetEnv Path
resetEnv AppPath

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