Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

จะลบโปรไฟล์ผู้ใช้เก่าโดยใช้ GPO และ PowerShell ได้อย่างไร

บนเวิร์กสเตชันและเซิร์ฟเวอร์ 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 และ PowerShell ได้อย่างไร

แต่นี่เป็นวิธีการแบบแมนนวล และคุณอาจต้องการทำให้เป็นแบบอัตโนมัติ

GPO:ลบโปรไฟล์ผู้ใช้ที่เก่ากว่าจำนวนวันที่ระบุ

ใน Windows มีนโยบายกลุ่มในตัวเพื่อลบโปรไฟล์ผู้ใช้ที่เก่ากว่า xx วันโดยอัตโนมัติ คุณสามารถค้นหานโยบาย ลบโปรไฟล์ผู้ใช้ที่เก่ากว่าจำนวนวันที่ระบุเมื่อเริ่มระบบใหม่ ในส่วน GPO การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> โปรไฟล์ผู้ใช้ . คุณสามารถเปิดใช้งานนโยบายนี้ใน Local Group Policy Editor (gpedit.msc) หรือใช้นโยบายโดเมนใน GPMC.msc

เปิดใช้งานนโยบายและระบุจำนวนวันที่ถือว่าโปรไฟล์ผู้ใช้มีการใช้งาน เมื่อหมดเวลานี้ บริการโปรไฟล์ผู้ใช้ Windows จะลบโปรไฟล์โดยอัตโนมัติเมื่อรีสตาร์ทครั้งถัดไป ขอแนะนำให้ระบุระยะเวลา 45-90 วันนี้ที่นี่

จะลบโปรไฟล์ผู้ใช้เก่าโดยใช้ GPO และ PowerShell ได้อย่างไร

เมื่อใช้นโยบายนี้ ตรวจสอบให้แน่ใจว่าเมื่อเซิร์ฟเวอร์ปิดหรือรีสตาร์ท ไม่มีปัญหากับเวลาของระบบ (ตรวจสอบบทความ "เวลาของระบบและวันที่เปลี่ยนแปลงหลังจากรีบูต") มิฉะนั้น โปรไฟล์ผู้ใช้ที่ใช้งานอยู่อาจถูกลบ

ปัญหาหลักที่เกี่ยวข้องกับวิธีการลบโปรไฟล์อัตโนมัตินี้กำลังรอการรีสตาร์ทเซิร์ฟเวอร์และการไม่เลือก (คุณไม่สามารถห้ามไม่ให้ลบโปรไฟล์ผู้ใช้บางโปรไฟล์ เช่น บัญชีในเครื่อง บัญชีผู้ดูแลระบบ ฯลฯ) นอกจากนี้ นโยบายนี้อาจใช้ไม่ได้หากซอฟต์แวร์ของบุคคลที่สามบางตัว (ส่วนใหญ่มักเป็นโปรแกรมป้องกันไวรัส) เข้าถึงไฟล์ 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

จะลบโปรไฟล์ผู้ใช้เก่าโดยใช้ GPO และ PowerShell ได้อย่างไร

มาแสดงรายการผู้ใช้ที่มีโปรไฟล์ไม่ได้ใช้เกิน 60 วัน หากต้องการค้นหา คุณสามารถใช้ค่าในช่อง LastUseTime ของโปรไฟล์

Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}| Measure-Object

ปรากฎว่าฉันมีบัญชีผู้ใช้ที่ไม่ใช้งาน 127 บัญชีบนโฮสต์ RDS ของฉัน (โดยมีขนาดโปรไฟล์ทั้งหมดประมาณ 18 GB)

จะลบโปรไฟล์ผู้ใช้เก่าโดยใช้ GPO และ PowerShell ได้อย่างไร

หากต้องการลบโปรไฟล์ทั้งหมดเหล่านี้ ก็เพียงพอที่จะเปลี่ยนเส้นทางรายชื่อผู้ใช้ไปยัง 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()}