উইন্ডোজ ওয়ার্কস্টেশন এবং সার্ভারগুলোর ওপর, বিশেষ করে RDS (Remote Desktop Services) সার্ভারগুলোর ওপর, C:\Users থেকে পুরনো (অনব্যবহৃত) ব্যবহারকারী প্রোফাইল মুছে ফেলার নিয়মিত প্রয়োজন হয়। যেকোনো রিমোট ডেস্কটপ সার্ভারের প্রধান সমস্যাটি হলো লোকাল ড্রাইভে ব্যবহারকারী প্রোফাইল ডিরেক্টরির আকার নিরন্তর বাড়তে থাকা। এটি আংশিকভাবে সমাধান হয় ব্যবহারকারী প্রোফাইলের সর্বোচ্চ আকারের কোটা এনেবল করে (FSRM বা NTFS কোটা দিয়ে)। যাইহোক, যদি টার্মিনাল সার্ভারের ব্যবহারকারী অনেক থাকে, তবে সময়ের সাথে C:\Users ডিরেক্টরি অপ্রয়োজনীয় ব্যবহারকারী প্রোফাইল ডিরেক্টরির বিশাল সংখ্যা জমা করবে।
উইন্ডোজে ব্যবহারকারী প্রোফাইল ম্যানুয়ালি কীভাবে মুছে ফেলবেন?
অনেক নবীন উইন্ডোজ অ্যাডমিন C:\Users থেকে ব্যবহারকারী প্রোফাইল ফোল্ডার ম্যানুয়ালি মুছে ফেলার চেষ্টা করেন। আপনি এটি করতে পারেন যদি ম্যানুয়ালি ফোল্ডার মুছে ফেলার পর, রেজিস্ট্রি কী HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProfileList থেকে এই ফোল্ডারের লিংকসহ ব্যবহারকারী প্রোফাইল সেকশনটি মুছে ফেলেন।
উইন্ডোজে ব্যবহারকারী প্রোফাইল ম্যানুয়ালি মুছে ফেলার সঠিক পদ্ধতি হলো System Properties খুলুন, Advanced System Settings -> User Profiles -> Settings-এ যান, তালিকা থেকে একজন ব্যবহারকারী সিলেক্ট করুন (Size কলামে লোকাল ড্রাইভে প্রোফাইলের আকার দেখানো থাকে) এবং Delete বাটনে ক্লিক করুন।

কিন্তু এটি একটি ম্যানুয়াল পদ্ধতি, এবং আপনি এটি অটোমেট করতে চাইতে পারেন।
GPO: নির্দিষ্ট দিনের চেয়ে পুরনো ব্যবহারকারী প্রোফাইল মুছে ফেলা
উইন্ডোজে একটি বিল্ট-ইন গ্রুপ পলিসি রয়েছে যা নির্দিষ্ট দিনের চেয়ে পুরনো ব্যবহারকারী প্রোফাইল স্বয়ংক্রিয়ভাবে মুছে ফেলে। আপনি Delete user profiles older than a specified number days on system restart পলিসিটি GPO বিভাগ Computer Configuration -> Administrative Templates -> System -> User Profiles-এ পাবেন। আপনি এই পলিসিটি Local Group Policy Editor (gpedit.msc) বা GPMC.msc-এ ডোমেন পলিসি ব্যবহার করে এনেবল করতে পারেন।
পলিসিটি এনেবল করুন এবং ব্যবহারকারী প্রোফাইল কত দিন সক্রিয় থাকবে সেই দিনের সংখ্যা নির্দিষ্ট করুন। এই সময়কাল শেষ হলে, উইন্ডোজ ব্যবহারকারী প্রোফাইল সার্ভিস পরবর্তী রিস্টার্টে প্রোফাইলটি স্বয়ংক্রিয়ভাবে মুছে ফেলবে। এখানে ৪৫-৯০ দিন নির্দিষ্ট করা প্রস্তাবিত।

এই পলিসি ব্যবহার করার সময় নিশ্চিত করুন যে সার্ভার শাটডাউন বা রিস্টার্টের সময় সিস্টেম টাইমের সাথে কোনো সমস্যা নেই (আর্টিকেলটি দেখুন "System time and date changes after reboot")। অন্যথায় সক্রিয় ব্যবহারকারী প্রোফাইল মুছে যেতে পারে।
এই অটোমেটিক প্রোফাইল রিমубাল পদ্ধতির প্রধান সমস্যাগুলো হলো: সার্ভার রিস্টার্টের জন্য অপেক্ষা করতে হয় এবং নন-সিলেক্টিভিটি (আপনি নির্দিষ্ট ব্যবহারকারী প্রোফাইল যেমন লোকাল অ্যাকাউন্ট, অ্যাডমিনিস্ট্রেটিভ অ্যাকাউন্ট, ইত্যাদি মুছে ফেলা থেকে রক্ষা করতে পারবেন না)। এছাড়া, এই পলিসি কাজ নাও করতে পারে যদি কোনো থার্ড-পার্টি সফটওয়্যার (সাধারণত এন্টিভাইরাস) ব্যবহারকারী প্রোফাইলে NTUSER.DAT ফাইল অ্যাক্সেস করে এবং লাস্ট ইউজের তারিখ আপডেট করে।
উইন্ডোজে পুরনো ব্যবহারকারী প্রোফাইল মুছে ফেলার PowerShell স্ক্রিপ্ট
উপরে বর্ণিত অটোমেটিক ক্লিনআপ প্রোফাইল পলিসি ব্যবহার করার বদলে, আপনি একটি সিম্পল PowerShell স্ক্রিপ্ট ব্যবহার করতে পারেন ডিসেবল বা নিষ্ক্রিয় ব্যবহারকারীদের প্রোফাইল খুঁজে বের করে মুছে ফেলতে।
প্রথমে, আর্টিকেল "Getting Directory Sizes in PowerShell" থেকে একটি সিম্পল স্ক্রিপ্ট ব্যবহার করে C:\Users-এ সব ব্যবহারকারী প্রোফাইল ফোল্ডারের আকার গণনা করার চেষ্টা করি:
gci -force 'C:\Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
$sum = $sum + $len
}
“Total size of profiles”,'{0:N2} GB' -f ($sum / 1Gb)
C:\Users-এ সব ব্যবহারকারী প্রোফাইলের মোট আকার ৩১.৫ GB।

চলুন ব্যবহারকারীদের তালিকা দেখি যাদের প্রোফাইল ৬০ দিনের বেশি সময় ধরে ব্যবহার করা হয়নি। এজন্য প্রোফাইলের LastUseTime ফিল্ডের মান ব্যবহার করা যাবে।
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}| Measure-Object
বের হয়েছে যে আমার RDS হোস্টে ১২৭টি নিষ্ক্রিয় ব্যবহারকারী অ্যাকাউন্ট আছে (প্রোফাইল মোট আকার প্রায় ১৮ GB)।

এই সব প্রোফাইল মুছে ফেলতে, ব্যবহারকারীদের তালিকাকে Remove-WmiObject কমান্ডে রিডাইরেক্ট করা যথেষ্ট (স্ক্রিপ্ট চালানোর আগে, এর আউটপুট –WhatIf প্যারামিটার ব্যবহার করে ডাবল-চেক করার পরামর্শ দেওয়া হয়):
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-30))} | Remove-WmiObject –WhatIf
কিছু ব্যবহারকারীর প্রোফাইল যেন মুছে না যায়, যেমন System এবং Network Service অ্যাকাউন্ট, লোকাল অ্যাডমিনিস্ট্রেটর অ্যাকাউন্ট, সক্রিয় সেশনযুক্ত ব্যবহারকারীদের অ্যাকাউন্ট, exception তালিকার অ্যাকাউন্ট, আপনি স্ক্রিপ্টটি নিচের মতো সংশোধন করতে পারেন:
#যেসব অ্যাকাউন্টের প্রোফাইল মুছে ফেলা উচিত নয় তাদের তালিকা
$ExcludedUsers ="Public","zabbix_agent","svc",”user_1”,”user_2”
$LocalProfiles=Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}
foreach ($LocalProfile in $LocalProfiles)
{
if (!($ExcludedUsers -like $LocalProfile.LocalPath.Replace("C:\Users\","")))
{
$LocalProfile | Remove-WmiObject
Write-host $LocalProfile.LocalPath, "profile deleted” -ForegroundColor Magenta
}
}
আপনি এই PowerShell স্ক্রিপ্টটি GPO-তে শাটডাউন স্ক্রিপ্ট হিসেবে বা Task Scheduler-এ PoSh স্ক্রিপ্ট হিসেবে চালাতে পারেন।
প্রোফাইল অটোমেটিক ডিলিশন কনফিগার করার আগে, আপনার এনভায়রনমেন্টে স্ক্রিপ্টটি টেস্ট করার পরামর্শ দেওয়া হয়!
আপনি স্ক্রিপ্টটি সংশোধন করে নির্দিষ্ট AD গ্রুপে যোগ করা সব ব্যবহারকারীর প্রোফাইল (উদাহরণস্বরূপ, DisabledUsers গ্রুপ) স্বয়ংক্রিয়ভাবে মুছে ফেলতে পারেন:
$users = Get-ADGroupMember -Identity DisabledUsers | Foreach {$_.Sid.Value}
$profiles = Get-WmiObject Win32_UserProfile
$profiles | Where {$users -eq $_.Sid} | Foreach {$_.Delete()}