পাওয়ারশেলের পথটি পুনরায় লোড করুন


145

যদি আমার কাছে পাওয়ারশেল আইএসই চলমান রয়েছে এবং আমি এমন কিছু ইনস্টল করেছি যা প্যাথএইচকে পরিবর্তন করে বা আমি পাওয়ারশেলের বাইরে যে কোনও উপায়ে এটি সংশোধন করি তবে আপডেট হওয়া প্যাথএইচ ভেরিয়েবলটি দেখার জন্য আমার পাওয়ারশেলটি পুনরায় চালু করতে হবে।

পাওয়ারশেলের মধ্যে দিয়ে পুনরায় আরম্ভ না করেই কি পথ আবার লোড করার কোনও উপায় আছে?

উত্তর:


207

কেবল রবের মন্তব্যটি আলোকিত করার জন্য:

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

3
হা. রবের মন্তব্যটি পাওয়ারশেল ক্যাসবাহকে সত্যই ধাক্কা দিয়েছে।
সিসিল কারি

24
আপনি chocolatey ব্যবহার করছেন, এবং এটি আপনার প্রোফাইলে লোড হচ্ছে, তাহলে সহজ কমান্ড দেওয়া হল: refreshenv। এটি মূলত রবের মন্তব্যের আরও বিস্তৃত সংস্করণটি চালায় ।
কুমারহর্ষ

আমি পাওয়ারশেল নুব হওয়ায় আমার কী করা দরকার তা ভেবে দেখার জন্য অনেক সময় ব্যয় করেছেন। পাগলের মতো পথ পরিবর্তন করছিল এবং এটিই আমার প্রয়োজন ছিল। +1
cr1pto

fww, আমি চকোলেটি ব্যবহার করছি ... কিন্তু refreshenvকাজ হয়নি। এখানে উত্তর ('রবস মন্তব্য') কৌশলটি দুর্দান্তভাবে করেছে। সুতরাং, কিছু পরিস্থিতিতে থাকতে পারে যেখানে একটি পদ্ধতির কাজ করে এবং অন্যটি কাজ করে না ...
3z33etm

3
যদি আপনি একই স্ক্রিপ্টে চকোলেটির মাধ্যমে চকোলেটী নিজেই এবং অন্যান্য অ্যাপ্লিকেশন ইনস্টল করে থাকেন যা PATH ভেরিয়েবলটি সংশোধন করে, refreshenvকাজ করবে না। refreshenvSubseqent শাঁস শুধুমাত্র কাজ খুলল।
ফ্রাঙ্ক ফু

72

মেশিনের পাথটি পাওয়ার চেষ্টা করুন এবং এটিকে সেশনের পথে নির্ধারিত করুন।

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

53
ধন্যবাদ যে কাজ! আমার কাছে ব্যবহারকারীর পরিবেশের পরিবর্তনশীল নামে একটি পাথ ছিল তাই আমাকে এই কাজটি করতে হয়েছিল: [সিস্টেম.এনভায়রনমেন্ট] :: গেট এনভায়রনমেন্ট ভেরিয়েবল ("পাথ", "মেশিন") + ";" + [সিস্টেম.এনভায়রনমেন্ট] :: গেট এনভায়রনমেন্ট ভেরিয়েবল ("পাথ", "ইউজার")
ছিনিয়ে নিন

24

সবচেয়ে সহজ উপায়, চকোলেটি (ফ্রিওয়্যার) ব্যবহার করুন। এটি সিএমডি এবং পাওয়ারশেল উভয়ের পক্ষে কাজ করে। তারপরে আপনি সাধারণ কমান্ডের মাধ্যমে PATH (পরিবর্তনশীল প্রসার সহ) পুনরায় লোড করতে সক্ষম হবেন:

refreshenv

সেন্টিমিডি থেকে ইনস্টলেশন (প্রশাসকের অধিকার প্রয়োজন):

@"%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 এ ঠিক পরীক্ষা করেছি এবং ব্যবহার করি, এটি প্রায়শই আমার কাজে লাগে। আমি যে ব্যবহারের উদাহরণ তৈরি করেছি তা প্রস্তুত নয়, এটি আমার কনসোল থেকে মুদ্রিত। সম্ভবত আপনার ক্ষেত্রে এটি ব্যবহারকারীর এবং সিস্টেমের ভেরিয়েবলগুলির মধ্যে দ্বন্দ্বের ধরণ হয়ে এসেছে? এছাড়াও, যেমন আমি লক্ষ্য করেছি, মাল্টিকনসোল এনভিতে (কোনমুর মতো) এটি কেবল বর্তমান কনসোলকেই প্রভাবিত করে।
আরকাদিউস প্রেচোডজকি

refreshenvএছাড়াও এখানে কাজ না। উইন্ডোজ স্যান্ডবক্স পরিবেশে কিছু স্ক্রিপ্টে কাজ করা এবং নতুন পিএস সেশন শুরু না করা হলে পথটি আপডেট হওয়া অস্বীকার করে।
মার্সার রিস

6

এমপেনের উত্তরের ভিত্তিতে , এখানে পাওয়ারশেল ফাংশন রয়েছে:

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

তারপরে শুধু ফোন করুন refresh-path


3

আপনার পথটিতে যদি পরিবেশের ভেরিয়েবলগুলি থাকে যা অধিবেশনটির শুরুতে সংজ্ঞায়িত হয়নি, আপনি সেগুলিও প্রসারিত করতে চাইবেন:

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

আমার জন্য এটি এনভিএম ইনস্টল করার পরে দরকারী যা পথটিতে% 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.