บนเวิร์กสเตชันและเซิร์ฟเวอร์ Windows โดยเฉพาะบนเซิร์ฟเวอร์ RDS (Remote Desktop Services) จำเป็นต้องลบโปรไฟล์ผู้ใช้เก่า (ที่ไม่ได้ใช้) ออกจาก C:\Users เป็นประจำ ปัญหาหลักของเซิร์ฟเวอร์เดสก์ท็อประยะไกลคือการเติบโตอย่างต่อเนื่องของขนาดไดเร็กทอรีโปรไฟล์ผู้ใช้บนไดรฟ์ในเครื่อง บางส่วนจะแก้ไขได้ด้วยการเปิดใช้งานโควต้าในขนาดโปรไฟล์ผู้ใช้สูงสุด (ด้วยโควต้า FSRM หรือ NTFS) อย่างไรก็ตาม หากมีผู้ใช้เซิร์ฟเวอร์เทอร์มินัลจำนวนมาก เมื่อเวลาผ่านไปไดเรกทอรี C:\Users จะรวบรวมไดเรกทอรีจำนวนมากที่มีโปรไฟล์ผู้ใช้ที่ไม่ต้องการอีกต่อไป
จะลบโปรไฟล์ผู้ใช้ด้วยตนเองใน Windows ได้อย่างไร
ผู้ดูแลระบบ Windows มือใหม่หลายคนพยายามลบโฟลเดอร์โปรไฟล์ผู้ใช้ออกจาก C:\Users ด้วยตนเอง คุณสามารถทำได้หากหลังจากลบโฟลเดอร์ด้วยตนเอง คุณจะลบส่วนโปรไฟล์ผู้ใช้ที่มีลิงก์ไปยังโฟลเดอร์นี้จากรีจิสตรีคีย์ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProfileList .
วิธีที่ถูกต้องในการลบโปรไฟล์ผู้ใช้ใน Windows ด้วยตนเองคือการเปิดคุณสมบัติของระบบ ไปที่ การตั้งค่าระบบขั้นสูง -> โปรไฟล์ผู้ใช้ -> การตั้งค่า เลือกผู้ใช้ในรายการ (คอลัมน์ขนาดแสดงขนาดของโปรไฟล์ในไดรฟ์ในเครื่อง) และคลิก ลบ ปุ่ม.
แต่นี่เป็นวิธีการแบบแมนนวล และคุณอาจต้องการทำให้เป็นแบบอัตโนมัติ
GPO:ลบโปรไฟล์ผู้ใช้ที่เก่ากว่าจำนวนวันที่ระบุ
ใน Windows มีนโยบายกลุ่มในตัวเพื่อลบโปรไฟล์ผู้ใช้ที่เก่ากว่า xx วันโดยอัตโนมัติ คุณสามารถค้นหานโยบาย ลบโปรไฟล์ผู้ใช้ที่เก่ากว่าจำนวนวันที่ระบุเมื่อเริ่มระบบใหม่ ในส่วน GPO การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> โปรไฟล์ผู้ใช้ . คุณสามารถเปิดใช้งานนโยบายนี้ใน Local Group Policy Editor (gpedit.msc) หรือใช้นโยบายโดเมนใน GPMC.msc
เปิดใช้งานนโยบายและระบุจำนวนวันที่ถือว่าโปรไฟล์ผู้ใช้มีการใช้งาน เมื่อหมดเวลานี้ บริการโปรไฟล์ผู้ใช้ Windows จะลบโปรไฟล์โดยอัตโนมัติเมื่อรีสตาร์ทครั้งถัดไป ขอแนะนำให้ระบุระยะเวลา 45-90 วันนี้ที่นี่
เมื่อใช้นโยบายนี้ ตรวจสอบให้แน่ใจว่าเมื่อเซิร์ฟเวอร์ปิดหรือรีสตาร์ท ไม่มีปัญหากับเวลาของระบบ (ตรวจสอบบทความ "เวลาของระบบและวันที่เปลี่ยนแปลงหลังจากรีบูต") มิฉะนั้น โปรไฟล์ผู้ใช้ที่ใช้งานอยู่อาจถูกลบ
ปัญหาหลักที่เกี่ยวข้องกับวิธีการลบโปรไฟล์อัตโนมัตินี้กำลังรอการรีสตาร์ทเซิร์ฟเวอร์และการไม่เลือก (คุณไม่สามารถห้ามไม่ให้ลบโปรไฟล์ผู้ใช้บางโปรไฟล์ เช่น บัญชีในเครื่อง บัญชีผู้ดูแลระบบ ฯลฯ) นอกจากนี้ นโยบายนี้อาจใช้ไม่ได้หากซอฟต์แวร์ของบุคคลที่สามบางตัว (ส่วนใหญ่มักเป็นโปรแกรมป้องกันไวรัส) เข้าถึงไฟล์ NTUSER.DAT ในโปรไฟล์ผู้ใช้และอัปเดตวันที่ใช้งานล่าสุด
สคริปต์ PowerShell เพื่อลบโปรไฟล์ผู้ใช้เก่าใน Windows
แทนที่จะใช้นโยบายโปรไฟล์การล้างข้อมูลอัตโนมัติที่อธิบายข้างต้น คุณสามารถใช้สคริปต์ PowerShell แบบง่ายเพื่อค้นหาและลบโปรไฟล์ของผู้ใช้ที่ถูกปิดใช้งานหรือไม่ได้ใช้งาน
ก่อนอื่น ให้ลองนับขนาดของโฟลเดอร์โปรไฟล์ผู้ใช้ทั้งหมดใน C:\Users โดยใช้สคริปต์อย่างง่ายจากบทความเรื่อง Getting Directory Sizes in PowerShell:
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 คือ 31,5 GB
มาแสดงรายการผู้ใช้ที่มีโปรไฟล์ไม่ได้ใช้เกิน 60 วัน หากต้องการค้นหา คุณสามารถใช้ค่าในช่อง LastUseTime ของโปรไฟล์
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}| Measure-Object
ปรากฎว่าฉันมีบัญชีผู้ใช้ที่ไม่ใช้งาน 127 บัญชีบนโฮสต์ RDS ของฉัน (โดยมีขนาดโปรไฟล์ทั้งหมดประมาณ 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
เพื่อไม่ให้ลบโปรไฟล์ของผู้ใช้บางคน เช่น System และ บริการเครือข่าย บัญชี ผู้ดูแลระบบท้องถิ่น บัญชี, บัญชีของผู้ใช้ที่มีช่วงการใช้งาน, บัญชี ข้อยกเว้น รายการ) คุณสามารถแก้ไขสคริปต์ได้ดังนี้:
#The list of accounts, which profiles must not be deleted
$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 เมื่อปิดระบบหรือด้วยสคริปต์ PoSh ใน Task Scheduler
ก่อนกำหนดค่าการลบโปรไฟล์โดยอัตโนมัติ ขอแนะนำให้ทดสอบสคริปต์ในสภาพแวดล้อมของคุณ!คุณสามารถแก้ไขสคริปต์เพื่อลบโปรไฟล์ผู้ใช้ทั้งหมดที่เพิ่มในกลุ่ม AD เฉพาะโดยอัตโนมัติ (เช่น กลุ่ม DisabledUsers):
$users = Get-ADGroupMember -Identity DisabledUsers | Foreach {$_.Sid.Value}
$profiles = Get-WmiObject Win32_UserProfile
$profiles | Where {$users -eq $_.Sid} | Foreach {$_.Delete()}