PowerShell में पथ पुनः लोड करें


145

अगर मेरे पास पॉवरशेल आईएसई चलाने का एक उदाहरण है और मैं कुछ ऐसा स्थापित करता हूं जो पीएटीएच को संशोधित करता है या मैं इसे पॉवरशेल के बाहर किसी भी तरह से संशोधित करता हूं तो मुझे अपडेट किए गए पैथ चर को देखने के लिए पॉवरशेल को पुनः आरंभ करने की आवश्यकता है।

क्या पॉवरशेल के भीतर से फिर से शुरू किए बिना पथ को फिर से लोड करने का एक तरीका है?

जवाबों:


207

सिर्फ रोब की टिप्पणी को प्रकाश में लाने के लिए:

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

3
हाँ। रोब की टिप्पणी वास्तव में पॉवर्सशेल कास्बाह को हिलाती है।
सेसिल करी

24
यदि आप चॉकलेट का उपयोग कर रहे हैं, और यह आपकी प्रोफ़ाइल में लोड है, तो एक सरल आदेश है refreshenv:। यह मूल रूप से लूट की टिप्पणी का अधिक विस्तृत संस्करण चलाता है ।
kumarharsh

बहुत समय बिताकर यह पता लगाने की कोशिश कर रहा हूं कि जब से मैं एक पॉवरबेल नोब हूं, तब मुझे क्या करना चाहिए। पागलों की तरह रास्ता बदल रहा था और यह वही है जिसकी मुझे ज़रूरत थी। +1
cr1pto

fwiw, मैं चॉकलेट का उपयोग कर रहा हूँ ... लेकिन refreshenvकाम नहीं किया। यहां जवाब ('रॉब्स कमेंट') ने अच्छी चाल चली। तो, कुछ परिस्थितियाँ हो सकती हैं जहाँ एक दृष्टिकोण काम करता है और दूसरा नहीं ...
3z33etm

3
यदि आप उसी स्क्रिप्ट पर चॉकलेट के माध्यम से स्वयं चॉकलेटरी और अन्य एप्लिकेशन इंस्टॉल कर रहे हैं जो पथ चर को संशोधित करता है, तो refreshenvकाम नहीं करेगा। refreshenvSubseqent गोले पर केवल काम करता है खोला।
फ्रैंक फू

72

मशीन पथ प्राप्त करने और सत्र के पथ पर असाइन करने का प्रयास करें।

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

53
धन्यवाद कि काम किया! मेरे पास पथ नाम से एक उपयोगकर्ता पर्यावरण चर भी था इसलिए मुझे यह करना पड़ा: [System.Environment] :: GetEnvironmentVariable ("पथ", "मशीन") + ";" + [System.Environment] :: GetEnvironmentVariable ("पथ", "उपयोगकर्ता")
लूटना

24

सबसे आसान तरीका, चॉकलेट (फ्रीवेयर) का उपयोग करें। यह CMD और PowerShell दोनों के लिए काम करता है। तब आप एक साधारण कमांड के साथ PATH (चर विस्तार के साथ) को पुनः लोड कर पाएंगे:

refreshenv

Cmd से स्थापना (व्यवस्थापक अधिकारों की आवश्यकता है):

@"%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"

उदाहरण उपयोग:

> 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

8
refreshenvमेरे लिए काम नहीं किया (विंडोज 10)। मुझे अभी भी इसके प्रभाव के लिए एक नई विंडो खोलनी थी।
पीटर मोर्टेंसन

1
मैंने विंडोज 10 पर इसका सटीक परीक्षण किया और इसका उपयोग किया, यह मेरे लिए काफी उपयोगी है। मेरे द्वारा बनाया गया उपयोग उदाहरण तैयार नहीं है, यह मेरे कंसोल से प्रिंट है। शायद आपके मामले में यह उपयोगकर्ता और सिस्टम चर के बीच संघर्ष की तरह है? साथ ही, जैसा कि मैंने देखा है, मल्टीकोनसोल एनवी (जैसे कोनमु) में यह केवल वर्तमान कंसोल को प्रभावित करता है।
आर्कादिउज़ Przechodzki

refreshenvयहां भी काम नहीं हो रहा है। एक विंडोज सैंडबॉक्स वातावरण में कुछ स्क्रिप्ट पर काम करना और पथ को केवल तब तक अपडेट करने से इंकार करना है जब तक कि एक नया पीएस सत्र शुरू न हो।
रीस मर्सर


3

यदि आपके पथ में पर्यावरण चर हैं जो सत्र की शुरुआत में परिभाषित नहीं किए गए थे, तो आप उन्हें भी विस्तारित करना चाहेंगे:

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

मेरे लिए यह NVM स्थापित करने के बाद उपयोगी था जो परिभाषित करता है और पथ में% NVM_HOME% जोड़ता है।

इसके तार्किक निष्कर्ष पर ले जाने के लिए, आप इसके बजाय विस्तार के लिए इस पुनरावर्ती कार्य का उपयोग कर सकते हैं:

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

और फिर उपयोग करें:

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

मैंने इस समाधान को चॉकलेटी से जोड़ने के लिए एक मुद्दा खोला हैrefreshenv


3

बस अन्य उत्तरों को जोड़ने के लिए, आप यह सुनिश्चित कर सकते हैं कि उपयोगकर्ता के पास खाली रास्ता होने की स्थिति में फ़िल्टरिंग के द्वारा आप शानदार जोड़ नहीं जोड़ सकते।

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

या, अधिक उपयोगी रूप से, यदि आप एक स्क्रिप्ट चला रहे हैं जो एक अलग या कई पर्यावरण चर में जोड़ता है, तो उन सभी को रीसेट करने के लिए फ़ंक्शन का उपयोग करें

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.