Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách xóa hồ sơ người dùng cũ bằng GPO và PowerShell?

Trên trạm làm việc và máy chủ Windows, đặc biệt là trên máy chủ RDS (Remote Desktop Services), có nhu cầu thường xuyên xóa hồ sơ người dùng cũ (không sử dụng) từ C:\Users. Vấn đề chính của bất kỳ máy chủ Remote Desktop nào là sự tăng trưởng liên tục kích thước thư mục hồ sơ người dùng trên ổ cục bộ. Nó được giải quyết một phần bằng cách bật hạn ngạch về kích thước hồ sơ người dùng tối đa (với FSRM hoặc hạn ngạch NTFS). Tuy nhiên, nếu có nhiều người dùng máy chủ terminal, theo thời gian thư mục C:\Users sẽ tích lũy một số lượng lớn thư mục với hồ sơ người dùng không còn cần thiết.

Cách xóa hồ sơ người dùng thủ công trong Windows?

Nhiều quản trị viên Windows mới thử xóa thủ công thư mục hồ sơ người dùng từ C:\Users. Bạn có thể làm điều đó nếu sau khi xóa thủ công thư mục, bạn sẽ xóa phần hồ sơ người dùng với liên kết đến thư mục này từ khóa registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProfileList.

Cách đúng để xóa thủ công hồ sơ người dùng trong Windows là mở System Properties, đi đến Advanced System Settings -> User Profiles -> Settings, chọn một người dùng trong danh sách (cột Size hiển thị kích thước hồ sơ trên ổ cục bộ) và nhấp nút Delete.

Cách xóa hồ sơ người dùng cũ bằng GPO và PowerShell?

Nhưng đây là phương pháp thủ công, và bạn có thể muốn tự động hóa nó.

GPO: Xóa hồ sơ người dùng cũ hơn số ngày chỉ định

Trong Windows, có một Chính sách nhóm tích hợp sẵn để tự động xóa hồ sơ người dùng cũ hơn xx ngày. Bạn có thể tìm thấy chính sách Delete user profiles older than a specified number days on system restart trong phần GPO Computer Configuration -> Administrative Templates -> System -> User Profiles. Bạn có thể bật chính sách này trong Trình chỉnh sửa Chính sách nhóm cục bộ (gpedit.msc) hoặc sử dụng chính sách miền trong GPMC.msc.

Bật chính sách và chỉ định số ngày hồ sơ người dùng được coi là hoạt động. Khi khoảng thời gian này kết thúc, dịch vụ hồ sơ người dùng Windows sẽ tự động xóa hồ sơ tại lần khởi động lại tiếp theo. Khuyến nghị chỉ định khoảng thời gian 45-90 ngày ở đây.

Cách xóa hồ sơ người dùng cũ bằng GPO và PowerShell?

Khi sử dụng chính sách này, hãy đảm bảo rằng khi máy chủ tắt hoặc khởi động lại không có vấn đề với thời gian hệ thống (xem bài viết "System time and date changes after reboot"). Nếu không, hồ sơ người dùng hoạt động có thể bị xóa.

Vấn đề chính liên quan đến phương pháp tự động xóa hồ sơ này là chờ đợi khởi động lại máy chủ và tính không chọn lọc (bạn không thể cấm xóa một số hồ sơ người dùng nhất định như tài khoản cục bộ, tài khoản quản trị, v.v.). Ngoài ra, chính sách này có thể không hoạt động nếu một số phần mềm của bên thứ ba (thường là phần mềm diệt virus) truy cập tệp NTUSER.DAT trong hồ sơ người dùng và cập nhật ngày sử dụng lần cuối.

Tập lệnh PowerShell để xóa hồ sơ người dùng cũ trong Windows

Thay vì sử dụng chính sách xóa hồ sơ tự động được mô tả ở trên, bạn có thể sử dụng một tập lệnh PowerShell đơn giản để tìm và xóa hồ sơ của người dùng bị vô hiệu hóa hoặc không hoạt động.

Trước hết, hãy thử tính toán kích thước của tất cả thư mục hồ sơ người dùng trong C:\Users bằng một tập lệnh đơn giản từ bài viết 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)

Tổng kích thước của tất cả hồ sơ người dùng trong C:\Users là 31,5 GB.

Cách xóa hồ sơ người dùng cũ bằng GPO và PowerShell?

Hãy hiển thị danh sách người dùng, hồ sơ của họ không được sử dụng hơn 60 ngày. Để tìm chúng, bạn có thể sử dụng giá trị trong trường LastUseTime của hồ sơ.

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

Hóa ra tôi có 127 tài khoản người dùng không hoạt động trên máy chủ RDS của mình (với tổng kích thước hồ sơ khoảng 18 GB).

Cách xóa hồ sơ người dùng cũ bằng GPO và PowerShell?

Để xóa tất cả các hồ sơ này, chỉ cần chuyển hướng danh sách người dùng đến lệnh Remove-WmiObject (trước khi chạy tập lệnh, khuyến nghị kiểm tra kỹ đầu ra của nó bằng tham số –WhatIf):

Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-30))} | Remove-WmiObject –WhatIf

Để không xóa hồ sơ của một số người dùng, như tài khoản System và Network Service, tài khoản local administrator, tài khoản của người dùng có phiên hoạt động, tài khoản exception list), bạn có thể sửa đổi tập lệnh như sau:

#Danh sách tài khoản, hồ sơ của họ không được xóa
$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
}
}

Bạn có thể chạy tập lệnh PowerShell này bằng GPO khi tắt máy hoặc với tập lệnh PoSh trong Task Scheduler.

Trước khi cấu hình xóa hồ sơ tự động, khuyến nghị kiểm tra tập lệnh trong môi trường của bạn!

Bạn có thể sửa đổi tập lệnh để tự động xóa tất cả hồ sơ người dùng được thêm vào nhóm AD cụ thể (ví dụ: nhóm DisabledUsers):

$users = Get-ADGroupMember -Identity DisabledUsers | Foreach {$_.Sid.Value}
$profiles = Get-WmiObject Win32_UserProfile
$profiles | Where {$users -eq $_.Sid} | Foreach {$_.Delete()}