2013-07-22 18 views
72

Se ho un'istanza di Powershell ISE in esecuzione e installo qualcosa che modifica il PATH o lo modifico in qualche modo al di fuori di Powershell, devo riavviare Powershell affinché veda la variabile PATH aggiornata.Ricarica il percorso in PowerShell

C'è un modo per ricaricare il percorso dall'interno PowerShell senza riavviare esso?

risposta

81

Solo per portare alla luce Rob's comment:

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

** Yup. ** [commento di Rob] (https://stackoverflow.com/questions/17794507/reload-the-path-in- powershell # comment25967553_17794885) colpisce la Casbah di Powershell, infatti. –

+5

dovrebbe essere più facile ... – Dyin

+7

Se stai usando cioccolatoso, ed è caricato nel tuo profilo, c'è un comando semplice: 'refreshenv'. Questo viene eseguito fondamentalmente una [versione più elaborata] (https://github.com/chocolatey/choco/blob/stable/src/chocolatey.resources/helpers/functions/Update-SessionEnvironment.ps1) di commento di Rob. –

59

provare a ottenere il percorso della macchina e assegnandolo al percorso della sessione.

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

Grazie, ha funzionato! Ho anche avuto un nome percorso variabile di ambiente utente per cui ho dovuto fare questo: [System.Environment] :: GetEnvironmentVariable ("Path", "Macchina") + ";" + [System.Environment] :: GetEnvironmentVariable ("Path", "Utente") – rob

0

Se il vostro percorso contiene le variabili d'ambiente che non sono stati definiti all'inizio della sessione, ti consigliamo di ampliare quelli troppo

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

per me questo è stato utile dopo l'installazione di NVM che definisce e aggiunge% NVM_HOME% al percorso

Per prendere questo alla sua logica conclusione è possibile utilizzare questa funzione ricorsiva per espandere invece

function Expand-EnvironmentVariablesRecursively($unexpanded) { 
    $previous = '' 
    $expanded = $unexpanded 
    while($previous -ne $expanded) { 
     $previous = $expanded  
     $expanded = [System.Environment]::ExpandEnvironmentVariables($previous) 
    } 
    return $expanded 
} 

e quindi utilizzare

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

ho opened an issue aggiungere questa soluzione in refreshenv da cioccolatoso

Problemi correlati