Windows वर्कस्टेशन और सर्वर पर, विशेष रूप से RDS (रिमोट डेस्कटॉप सर्विसेज) सर्वर पर, C:\Users से पुराने (अनुपयोगी) उपयोगकर्ता प्रोफाइल को हटाने की नियमित आवश्यकता होती है। किसी भी रिमोट डेस्कटॉप सर्वर की मुख्य समस्या स्थानीय ड्राइव पर उपयोगकर्ता प्रोफाइल निर्देशिकाओं के आकार की निरंतर वृद्धि है। यह आंशिक रूप से उपयोगकर्ता प्रोफाइल के अधिकतम आकार पर कोटा सक्षम करके हल किया जाता है (FSRM या NTFS कोटा के साथ)। हालांकि, यदि बहुत सारे टर्मिनल सर्वर उपयोगकर्ता हैं, तो समय के साथ C:\Users निर्देशिका में उन उपयोगकर्ता प्रोफाइल के साथ बड़ी संख्या में निर्देशिकाएं जमा हो जाएंगी जिनकी अब आवश्यकता नहीं है।
Windows में उपयोगकर्ता प्रोफाइल को मैन्युअली कैसे हटाएं?
कई नौसिखिए Windows एडमिन C:\Users से उपयोगकर्ता प्रोफाइल फ़ोल्डर को मैन्युअली हटाने का प्रयास करते हैं। आप ऐसा कर सकते हैं यदि मैन्युअली फ़ोल्डर हटाने के बाद, आप रजिस्ट्री कुंजी HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProfileList से इस फ़ोल्डर के लिंक वाले उपयोगकर्ता प्रोफाइल अनुभाग को हटा देंगे।
Windows में उपयोगकर्ता प्रोफाइल को मैन्युअली हटाने का सही तरीका है सिस्टम गुण खोलें, उन्नत सिस्टम सेटिंग्स -> उपयोगकर्ता प्रोफाइल -> सेटिंग्स पर जाएं, सूची में एक उपयोगकर्ता चुनें (आकार कॉलम स्थानीय ड्राइव पर प्रोफाइल का आकार दिखाता है) और हटाएं बटन पर क्लिक करें।

लेकिन यह एक मैन्युअल विधि है, और आप इसे स्वचालित करना चाह सकते हैं।
GPO: निर्दिष्ट दिनों से पुराने उपयोगकर्ता प्रोफाइल हटाएं
Windows में, निर्दिष्ट दिनों से पुराने उपयोगकर्ता प्रोफाइल को सिस्टम पुनरारंभ पर स्वचालित रूप से हटाने के लिए एक अंतर्निहित समूह नीति है। आप नीति सिस्टम पुनरारंभ पर निर्दिष्ट दिनों से पुराने उपयोगकर्ता प्रोफाइल हटाएं को GPO अनुभाग कंप्यूटर कॉन्फ़िगरेशन -> प्रशासनिक टेम्पलेट -> सिस्टम -> उपयोगकर्ता प्रोफाइल में पा सकते हैं। आप इस नीति को स्थानीय समूह नीति संपादक (gpedit.msc) में सक्षम कर सकते हैं या GPMC.msc में डोमेन नीतियों का उपयोग कर सकते हैं।
नीति सक्षम करें और उन दिनों की संख्या निर्दिष्ट करें जिनके लिए उपयोगकर्ता प्रोफाइल को सक्रिय माना जाता है। जब यह अवधि समाप्त हो जाती है, तो Windows उपयोगकर्ता प्रोफाइल सेवा अगले पुनरारंभ पर प्रोफाइल को स्वचालित रूप से हटा देगी। यहां 45-90 दिनों की अवधि निर्दिष्ट करने की सिफारिश की जाती है।

इस नीति का उपयोग करते समय, सुनिश्चित करें कि जब सर्वर बंद या पुनरारंभ होता है तो सिस्टम समय के साथ कोई समस्या नहीं है (लेख "पुनरारंभ के बाद सिस्टम समय और तिथि बदलती है" देखें)। अन्यथा सक्रिय उपयोगकर्ता प्रोफाइल हटाए जा सकते हैं।
इस स्वचालित प्रोफाइल हटाने विधि से जुड़ी मुख्य परेशानियां सर्वर पुनरारंभ की प्रतीक्षा कर रही हैं और गैर-चयनात्मकता (आप स्थानीय खातों, प्रशासनिक खातों आदि जैसे कुछ उपयोगकर्ता प्रोफाइल को हटाने से प्रतिबंधित नहीं कर सकते)। साथ ही, यह नीति काम नहीं कर सकती है यदि कुछ तृतीय-पक्ष सॉफ़्टवेयर (अक्सर यह एंटीवायरस होता है) उपयोगकर्ता प्रोफाइल में NTUSER.DAT फ़ाइल को एक्सेस करता है और अंतिम उपयोग की तिथि को अपडेट करता है।
Windows में पुराने उपयोगकर्ता प्रोफाइल को हटाने के लिए PowerShell स्क्रिप्ट
ऊपर वर्णित स्वचालित क्लीनअप प्रोफाइल नीति के बजाय, आप अक्षम या निष्क्रिय उपयोगकर्ताओं के प्रोफाइल को ढूंढने और हटाने के लिए एक साधारण PowerShell स्क्रिप्ट का उपयोग कर सकते हैं।
सबसे पहले, आइए 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
}
"प्रोफाइल का कुल आकार",'{0:N2} GB' -f ($sum / 1Gb)
C:\Users में सभी उपयोगकर्ता प्रोफाइल का कुल आकार 31.5 GB है।

आइए उन उपयोगकर्ताओं की सूची प्रदर्शित करें जिनके प्रोफाइल 60 दिनों से अधिक समय से उपयोग नहीं किए गए हैं। उन्हें ढूंढने के लिए, आप प्रोफाइल के LastUseTime फ़ील्ड में मान का उपयोग कर सकते हैं।
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}| Measure-Object
यह पता चला कि मेरे RDS होस्ट पर 127 निष्क्रिय उपयोगकर्ता खाते थे (लगभग 18 GB के प्रोफाइल कुल आकार के साथ)।

इन सभी प्रोफाइल को हटाने के लिए, उपयोगकर्ता सूची को Remove-WmiObject कमांड पर रीडायरेक्ट करना पर्याप्त है (स्क्रिप्ट चलाने से पहले, इसके आउटपुट को -WhatIf पैरामीटर का उपयोग करके दोबारा जांचने की सिफारिश की जाती है):
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-30))} | Remove-WmiObject –WhatIf
कुछ उपयोगकर्ताओं के प्रोफाइल को न हटाने के लिए, जैसे सिस्टम और नेटवर्क सेवा खाते, स्थानीय प्रशासक खाता, सक्रिय सत्र वाले उपयोगकर्ताओं के खाते, अपवाद सूची के खाते), आप स्क्रिप्ट को निम्नानुसार संशोधित कर सकते हैं:
#उन खातों की सूची जिनके प्रोफाइल हटाए नहीं जाने चाहिए
$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, "प्रोफाइल हटाया गया" -ForegroundColor Magenta
}
}
आप इस PowerShell स्क्रिप्ट को शटडाउन पर GPO का उपयोग करके या टास्क शेड्यूलर में PoSh स्क्रिप्ट के साथ चला सकते हैं।
स्वचालित प्रोफाइल हटाने को कॉन्फ़िगर करने से पहले, अपने वातावरण में स्क्रिप्ट का परीक्षण करने की सिफारिश की जाती है!
आप स्क्रिप्ट को विशिष्ट AD समूह (उदाहरण के लिए, DisabledUsers समूह) में जोड़े गए सभी उपयोगकर्ता प्रोफाइल को स्वचालित रूप से हटाने के लिए संशोधित कर सकते हैं:
$users = Get-ADGroupMember -Identity DisabledUsers | Foreach {$_.Sid.Value}
$profiles = Get-WmiObject Win32_UserProfile
$profiles | Where {$users -eq $_.Sid} | Foreach {$_.Delete()}