Trên các máy trạm và máy chủ Windows, đặc biệt là trên các máy chủ RDS (Dịch vụ Máy tính Từ xa), thường xuyên phải xóa hồ sơ người dùng cũ (không sử dụng) khỏi C:\ Users. Vấn đề chính của bất kỳ máy chủ Remote Desktop nào là kích thước của các thư mục hồ sơ người dùng trên ổ đĩa cục bộ không ngừng tăng lên. Nó được giải quyết một phần bằng cách bật hạn ngạch trên kích thước hồ sơ người dùng tối đa (với hạn ngạch FSRM hoặc NTFS). Tuy nhiên, nếu có nhiều người dùng máy chủ đầu cuối, theo thời gian, thư mục C:\ Users sẽ tích lũy một số lượng lớn các thư mục với các hồ sơ người dùng không còn cần thiết.
Làm cách nào để Xóa Hồ sơ Người dùng theo cách thủ công trong Windows?
Nhiều quản trị viên mới làm quen với Windows cố gắng xóa thủ công thư mục hồ sơ người dùng khỏi 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 có liên kết đến thư mục này từ khóa đăng ký HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList .
Cách chính xác để xóa hồ sơ người dùng trong Windows theo cách thủ công là mở Thuộc tính hệ thống, đi tới Cài đặt hệ thống nâng cao -> Hồ sơ người dùng -> Cài đặt , chọn một người dùng trong danh sách (cột Kích thước hiển thị kích thước của cấu hình trên ổ đĩa cục bộ) và nhấp vào nút Xóa nút.
Nhưng đây là một 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 để 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 Xóa hồ sơ người dùng cũ hơn một số ngày cụ thể khi khởi động lại hệ thống trong phần GPO Cấu hình máy tính -> Mẫu quản trị -> Hệ thống -> Hồ sơ người dùng . Bạn có thể bật chính sách này trong Local Group Policy Editor (gpedit.msc) hoặc sử dụng các 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ơ ở lần khởi động lại tiếp theo. Nên chỉ định khoảng thời gian 45-90 ngày ở đây.
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 đề gì với thời gian hệ thống (xem bài viết “Thay đổi ngày và giờ hệ thống sau khi khởi động lại”). Nếu không, hồ sơ người dùng đang hoạt động có thể bị xóa.
Những rắc rối chính liên quan đến phương pháp xóa hồ sơ tự động này là chờ máy chủ khởi động lại và không có tính 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 chống vi-rút) truy cập tệp NTUSER.DAT trong hồ sơ người dùng và cập nhật ngày sử dụng gần đây nhất.
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 hồ sơ dọn dẹp tự động được mô tả ở trên, bạn có thể sử dụng 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ử đếm kích thước của tất cả cá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 Lấy kích thước thư mục trong 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.
Hãy hiển thị danh sách người dùng có hồ sơ không được sử dụng trong hơn 60 ngày. Để tìm chúng, bạn có thể sử dụng giá trị trong trường LastUseTime của cấu hình.
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}| Measure-Object
Hóa ra là 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).
Để xóa tất cả các cấu hình này, chỉ cần chuyển hướng danh sách người dùng đến Đối tượng Xóa-WmiO là đủ (trước khi chạy tập lệnh, bạn nên kiểm tra kỹ đầu ra của nó bằng cách sử dụ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ư Hệ thống và Dịch vụ mạng tài khoản, một quản trị viên cục bộ tài khoản, tài khoản của người dùng có phiên hoạt động, tài khoản ngoại lệ ), bạn có thể sửa đổi tập lệnh như sau:
#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
}
}
Bạn có thể chạy tập lệnh PowerShell này bằng GPO khi tắt máy hoặc bằng tập lệnh PoSh trong Bộ lập lịch tác vụ.
Trước khi định cấu hình tự động xóa cấu hình, bạn nên kiểm tra tập lệnh trong môi trường của mình!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 QUẢNG CÁO cụ thể (ví dụ:nhóm Người dùng bị vô hiệu hóa):
$users = Get-ADGroupMember -Identity DisabledUsers | Foreach {$_.Sid.Value}
$profiles = Get-WmiObject Win32_UserProfile
$profiles | Where {$users -eq $_.Sid} | Foreach {$_.Delete()}