Menghapus profil pengguna Windows lama menggunakan GPO atau PowerShell

Pada workstation dan server Windows, terutama pada server terminal RDS (Remote Desktop Services), secara berkala ada kebutuhan untuk membersihkan direktori C: \ Users dari profil pengguna lama (pengguna yang diberhentikan, pengguna yang belum pernah menggunakan server untuk waktu yang lama, dll.).

Masalah utama server terminal adalah peningkatan konstan dalam ukuran direktori profil pengguna pada disk. Masalah ini sebagian diselesaikan oleh kebijakan kuota ukuran profil pengguna menggunakan kuota FSRM atau NTFS, folder roaming, dll. Tetapi dengan sejumlah besar pengguna server terminal, sejumlah besar direktori dengan profil pengguna yang tidak perlu terakumulasi dari waktu ke waktu di folder C: \ Users.

Konten:

  • Hapus profil pengguna secara manual di Windows
  • Kebijakan Grup untuk menghapus profil lama secara otomatis
  • Menghapus server dari profil pengguna lama menggunakan PowerShell

Hapus profil pengguna secara manual di Windows

Banyak administrator pemula mencoba untuk menghapus direktori secara manual dengan profil pengguna dari folder C: \ Users. Ini dapat dilakukan jika, setelah menghapus folder, secara manual menghapus bagian profil pengguna dengan tautan ke direktori di cabang registri HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Cara manual yang benar untuk menghapus profil pengguna di Windows adalah dengan membuka properti sistem, buka Pengaturan sistem lanjutan -> Profil pengguna -> Pengaturan, pilih profil pengguna dalam daftar pengguna (kolom Ukuran menunjukkan ukuran profil pengguna) dan klik Hapus.

Tapi ini cara manual, tapi saya ingin otomatisasi.

Kebijakan Grup untuk menghapus profil lama secara otomatis

Windows memiliki kebijakan grup bawaan untuk secara otomatis menghapus profil pengguna lama yang lebih tua dari xx hari. Kebijakan ini ada di bagian. Konfigurasi komputer -> Template Administratif -> Sistem -> Profil pengguna (Konfigurasi Komputer -> Template Administratif -> Sistem -> Profil Pengguna) dan disebut “Hapus profil pengguna setelah reboot setelah beberapa hari yang ditentukan”(Hapus profil pengguna yang lebih tua dari jumlah hari yang ditentukan saat sistem dihidupkan ulang). Anda dapat mengaktifkan opsi ini di editor kebijakan lokal (gpedit.msc) atau menggunakan kebijakan domain dari konsol GPMC.msc.

Aktifkan kebijakan dan tentukan setelah berapa hari profil pengguna dianggap tidak aktif dan "Layanan Profil Pengguna Windows" dapat secara otomatis menghapus profil tersebut pada saat reboot. Biasanya ada baiknya menyebutkan setidaknya 45-90 hari.

Saat menggunakan kebijakan ini, Anda harus yakin bahwa ketika Anda mematikan / me-restart server tidak ada masalah dengan waktu sistem (waktu tidak tersesat), jika profil pengguna yang aktif dapat dihapus.

Masalah utama dengan metode pembersihan profil ini adalah menunggu reboot server dan tidak membeda-bedakan (Anda tidak dapat mencegah penghapusan profil tertentu, misalnya, akun lokal, administrator, dll.). Juga, kebijakan ini mungkin tidak berfungsi jika beberapa perangkat lunak pihak ketiga (paling sering merupakan antivirus) mengakses file NTUSER.DAT dalam profil pengguna dan memperbarui tanggal penggunaan terakhir.

Menghapus server dari profil pengguna lama menggunakan PowerShell

Alih-alih menggunakan kebijakan untuk pembersihan otomatis profil yang dibahas di atas, Anda dapat menggunakan skrip PowerShell sederhana untuk menemukan dan menghapus profil pengguna yang tidak aktif atau diblokir..

Pertama, kami akan mencoba menghitung ukuran setiap profil pengguna di folder C: \ Users menggunakan skrip sederhana dari artikel "Keluaran Ukuran Folder Menggunakan PowerShell":

gci-force 'C: \ Users'-ErrorAction SilentlyContinue | ? $ _ -is [io.directoryinfo] | %
$ len = 0
gci -recurse -force $ _. nama lengkap -ErrorAction SilentlyContinue | % $ len + = $ _. panjang
$ _. nama lengkap, '0: N2 GB' -f ($ len / 1Gb)
$ jumlah = $ jumlah + $ len

“Total ukuran profil”, '0: N2 GB' -f ($ sum / 1Gb)

Total ukuran total semua profil pengguna dalam direktori C: \ Users adalah sekitar 22 GB.

Sekarang kami akan mencantumkan pengguna yang profilnya belum digunakan selama lebih dari 60 hari. Anda dapat menggunakan nilai bidang profil LastUseTime untuk mencari..

Dapatkan-WMIObject -class Win32_UserProfile | Di mana (! $ _. Spesial) -dan ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-60)) | Measure-Object

Saya memiliki 143 profil pengguna tidak aktif di server terminal (ukuran total sekitar 10 GB).

Untuk menghapus semua profil ini, cukup tambahkan redirect daftar ke perintah Remove-WmiObject (sebelum menggunakan script delete, disarankan untuk memeriksa ulang hasilnya dengan parameter -WhatIf):

Dapatkan-WMIObject -class Win32_UserProfile | Di mana (! $ _. Special) -and (! $ _. Loaded) -and ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-30)) | Hapus-WmiObject -ApaIf

Agar tidak menghapus profil beberapa pengguna, misalnya, akun Sistem dan Layanan Jaringan khusus, akun administrator lokal, pengguna dengan sesi aktif, daftar akun pengecualian), Anda perlu memodifikasi skrip sebagai berikut:

# Daftar akun yang profilnya tidak dapat dihapus
$ ExcludedUsers = "Publik", "zenoss", "svc", ”user_1”, ”user_2”
$ LocalProfiles = Dapatkan-WMIObject -class Win32_UserProfile | Di mana (! $ _. Special) -and (! $ _. Loaded) -and ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-60))
foreach ($ LocalProfile dalam $ LocalProfiles)

if (! ($ ExcludedUsers - like $ LocalProfile.LocalPath.Replace ("C: \ Users \", "")))

$ LocalProfile | Hapus-WmiObject
Host-host $ LocalProfile.LocalPath, "profil dihapus" -ForegroundColor Magenta

Anda dapat mengonfigurasi peluncuran skrip ini melalui skrip kebijakan grup shutdown atau sesuai jadwal oleh penjadwal. (Sebelum menyiapkan penghapusan profil secara otomatis, uji skrip dengan hati-hati di lingkungan Anda!).

Anda dapat memodifikasi skrip untuk secara otomatis menghapus pengguna dari semua pengguna yang ditambahkan ke grup AD tertentu (misalnya, grup DisabledUsers):

$ users = Get-ADGroupMember -Identity DisabledUsers | Foreach $ _. Sid.Value
$ profiles = Get-WmiObject Win32_UserProfile
$ profil | Di mana $ users -eq $ _. Sid | Foreach $ _. Delete ()