এটি বেশ কিছুটা আচ্ছাদিত করা হয়েছে তবে তথ্যের এক গুরুত্বপূর্ণ অংশটি এটি অনুপস্থিত। আশা করি, আমি কীভাবে এটি কাজ করে তা পরিষ্কার করতে এবং ক্লান্ত ভ্রমণকারীদের কিছুটা স্বস্তি দিতে সহায়তা করতে পারি। :-)
বর্তমান প্রক্রিয়া থেকে মুছুন
স্পষ্টতই, সবাই জানে যে আপনি আপনার বর্তমান প্রক্রিয়া থেকে পরিবেশের পরিবর্তনশীল মুছতে কেবল এটি করেন:
set FOO=
ক্রমাগত মুছুন
সিস্টেম-ওয়াইড এবং ব্যবহারকারী দুটি পরিবেশের ভেরিয়েবলের সেট রয়েছে।
ব্যবহারকারীর পরিবেশ পরিবর্তনযোগ্য মুছুন:
reg delete "HKCU\Environment" /v FOO /f
সিস্টেম-ওয়াইড পরিবেশ পরিবর্তনযোগ্য মুছুন:
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V FOO
রিবুট না করে মান প্রয়োগ করুন
এখানে যে যাদু তথ্য রয়েছে তা এখানে! আপনি ভাবছেন কেন আপনি এটি করার পরে যখন আপনি একটি নতুন কমান্ড উইন্ডো চালু করবেন তখন পরিবেশের পরিবর্তনশীলটি এখনও সেখানে রয়েছে। কারণ হ'ল এক্সপ্লোরার.আর.সি. এর পরিবেশ আপডেট হয়নি। যখন একটি প্রক্রিয়া আরেকটি প্রবর্তন করে, নতুন প্রক্রিয়া পরিবেশটি উত্তোলন করে যে প্রক্রিয়াটি এটি প্রবর্তন করে।
পুনরায় বুট না করে এটিকে ঠিক করার দুটি উপায় রয়েছে। সর্বাধিক নিষ্ঠুর শক্তি হ'ল আপনার এক্সপ্লোরার। এক্স এক্স প্রক্রিয়াটিকে মেরে ফেলা এবং এটি আবার শুরু করা। আপনি এটি টাস্ক ম্যানেজার থেকে করতে পারেন । আমি তবে এই পদ্ধতির প্রস্তাব দিই না।
অন্য উপায়টি হল এক্সপ্লোরার এক্সেক্সকে জানিয়ে দেওয়া যে পরিবেশটি পরিবর্তিত হয়েছে এবং এটি আবার পড়তে হবে। এটি একটি উইন্ডোজ বার্তা সম্প্রচারের মাধ্যমে করা হয় (WM_SETTINGCHANGE)। এটি একটি সাধারণ পাওয়ারশেল স্ক্রিপ্টের সাহায্যে সম্পন্ন করা যায়। এটি করার জন্য আপনি সহজেই একটি লিখতে পারেন, তবে আমি স্ক্রিপ্টযুক্ত পরিবর্তনের পরে উইন্ডো সেটিংস আপডেটে একটি পেয়েছি :
if (-not ("win32.nativemethods" -as [type])) {
add-type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam,
uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}
$HWND_BROADCAST = [intptr]0xffff;
$WM_SETTINGCHANGE = 0x1a;
$result = [uintptr]::zero
[win32.nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE,[uintptr]::Zero, "Environment", 2, 5000, [ref]$result);
সারসংক্ষেপ
সুতরাং "এফইউ" নামের একটি ব্যবহারকারী পরিবেশ পরিবর্তনশীল মুছতে এবং আপনার পরে প্রবর্তন করা প্রক্রিয়াগুলিতে পরিবর্তনটি প্রতিবিম্বিত করতে, নিম্নলিখিতটি করুন।
- পাওয়ারশেল স্ক্রিপ্টটি একটি ফাইলে সংরক্ষণ করুন (আমরা এটিকে আপডেটেনভিপিএস 1 বলব)।
- কমান্ড লাইন থেকে এটি করুন: "HKCU \ পরিবেশ" / v FOO / f মুছে ফেলুন
- Updateenv.ps1 চালান।
- আপনার কমান্ড প্রম্পটটি বন্ধ করুন এবং পুনরায় খুলুন এবং আপনি দেখতে পাবেন যে পরিবেশের ভেরিয়েবলটি আর সংজ্ঞায়িত হয়নি।
দ্রষ্টব্য, আপনাকে সম্ভবত এই স্ক্রিপ্টটি চালানোর অনুমতি দেওয়ার জন্য আপনার পাওয়ারশেল সেটিংস আপডেট করতে হবে, তবে আমি এটিকে আপনার জন্য গুগল-ফু অনুশীলন হিসাবে ছেড়ে দেব।