Odstranjevanje starih uporabniških profilov sistema Windows z uporabo GPO ali PowerShell

Na delovnih postajah in strežnikih Windows, zlasti na terminalskih strežnikih RDS (Remote Desktop Services), je občasno potrebno očistiti imenik C: \ Uporabniki iz starih uporabniških profilov (odpuščeni uporabniki, uporabniki, ki strežnika že dolgo ne uporabljajo itd.).

Glavna težava terminalskih strežnikov je stalno povečevanje velikosti imenikov uporabniških profilov na disku. To težavo delno rešujejo pravilniki o kvotah velikosti uporabniških profilov z uporabo kvot FSRM ali NTFS, mape gostovanja itd. Toda pri velikem številu uporabnikov terminalskih strežnikov se v mapi C: \ Uporabniki sčasoma nabere ogromno imenikov z nepotrebnimi uporabniškimi profili..

Vsebina:

  • Ročno izbrišite uporabniški profil v operacijskem sistemu Windows
  • Pravilnik skupine za samodejno brisanje starih profilov
  • Brisanje strežnika s starih uporabniških profilov s pomočjo PowerShell-a

Ročno izbrišite uporabniški profil v operacijskem sistemu Windows

Mnogi začetniki skrbniki poskušajo ročno izbrisati imenik z uporabniškim profilom iz mape C: \ Uporabniki. To lahko storite, če po brisanju mape ročno izbrišete razdelek z uporabniškim profilom s povezavo do imenika v podružnici registra HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Pravi ročni način brisanja uporabniškega profila v operacijskem sistemu Windows je odpiranje sistemskih lastnosti, pojdite na Napredne sistemske nastavitve -> Uporabniški profili -> Nastavitve, na seznamu uporabnikov izberite uporabniški profil (stolpec Velikost kaže velikost uporabniškega profila) in kliknite Izbriši.

Ampak to je ročni način, vendar želim avtomatizacijo.

Pravilnik skupine za samodejno brisanje starih profilov

Windows ima vgrajeno skupinsko politiko za samodejno brisanje starih uporabniških profilov, starejših od xx dni. Ta pravilnik je v razdelku. Konfiguracija računalnika -> Upravne predloge -> Sistem -> Uporabniški profili (Konfiguracija računalnika -> Administrativne predloge -> Sistem -> Uporabniški profili) in se imenuje "Po ponovnem zagonu izbrišite uporabniške profile po določenem številu dni”(Pri ponovnem zagonu sistema izbrišite uporabniške profile, starejše od določenega števila dni). To možnost lahko omogočite v lokalnem urejevalniku pravilnikov (gpedit.msc) ali z uporabo pravilnikov domene s konzole GPMC.msc.

Omogočite pravilnik in določite, po koliko dneh se uporabniški profil šteje za neaktiven in "Windows User Profile Profile" lahko ta profil samodejno izbriše ob naslednjem zagonu. Običajno je vredno določiti vsaj 45-90 dni.

Pri uporabi tega pravilnika morate biti prepričani, da ob izklopu / ponovnem zagonu strežnika ni težav s sistemskim časom (čas ne gre narobe), sicer se lahko aktivni uporabniški profili izbrišejo.

Glavne težave pri tej metodi samodejnega čiščenja profilov so čakanje na ponovni zagon strežnika in nediskriminatornost (ne morete preprečiti brisanja nekaterih profilov, na primer lokalnih računov, skrbnikov itd.). Prav tako ta pravilnik morda ne bo deloval, če neka programska oprema drugih proizvajalcev (najpogosteje gre za protivirusni program) dostopa do datoteke NTUSER.DAT v uporabniških profilih in posodobi datum zadnje uporabe.

Brisanje strežnika s starih uporabniških profilov s pomočjo PowerShell-a

Namesto uporabe pravilnika za samodejno čiščenje profilov, ki smo ga obravnavali zgoraj, lahko uporabite preprost skript PowerShell za iskanje in brisanje profilov neaktivnih ali blokiranih uporabnikov.

Najprej bomo poskušali izračunati velikost profila vsakega uporabnika v mapi C: \ Uporabniki s preprostim skriptom iz članka "Velikost izhodne mape z uporabo PowerShell":

gci -force 'C: \ Users'-ErrorAction SilentlyContinue | ? $ _ -je [io.directoryinfo] | %
$ len = 0
gci -recurse -force $ _. polno ime -ErrorAction SilentlyContinue | % $ len + = $ _. length
$ _. polno ime, '0: N2 GB' -f ($ len / 1Gb)
$ sum = $ sum + $ len

"Skupna velikost profila", "0: N2 GB" -f ($ vsota / 1Gb)

Skupna skupna velikost vseh uporabniških profilov v imeniku C: \ Uporabniki je približno 22 GB.

Zdaj bomo navedli uporabnike, katerih profil ni bil uporabljen več kot 60 dni. Za iskanje lahko uporabite vrednost polja profila LastUseTime..

Get-WMIObject -clas Win32_UserProfile | Kje (! $ _. Poseben) -and ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .Dodaj (-60)) | Ukrep-predmet

Na terminalskem strežniku sem imel 143 profilov neaktivnih uporabnikov (skupna velikost približno 10 GB).

Če želite odstraniti vse te profile, dodajte seznam za preusmeritev v ukaz Remove-WmiObject (preden uporabite skript za brisanje, je priporočljivo dvakrat preveriti njegov izhod s parametrom -WhatIf):

Get-WMIObject -clas Win32_UserProfile | Kje (! $ _. Poseben) -and (! $ _. Naložen) -and ($ _. PretvoriToDateTime ($ _. LastUseTime) -lt (datum-datum) .dne dnevi (-30)) | Odstrani-WmiObject -WhatIf

Če ne želite izbrisati profilov nekaterih uporabnikov, na primer posebnih računov sistemskih in omrežnih storitev, lokalnega skrbniškega računa, uporabnikov z aktivnimi sejami, seznama izjemnih računov), morate spremeniti skript na naslednji način:

# Seznam računov, katerih profilov ni mogoče izbrisati
$ ExcludedUsers = "Javno", "zenoss", "svc", "user_1", "user_2"
$ LocalProfiles = Get-WMIObject -clas Win32_UserProfile | Kje (! $ _. Poseben) -and (! $ _. Naložen) -and ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-60))
foreach ($ LocalProfile v $ LocalProfiles)

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

$ LocalProfile | Odstrani-WmiObject
Pišite-gostitelj $ LocalProfile.LocalPath, "profil izbrisan" -ForegroundColor Magenta

Zagon tega skripta lahko konfigurirate s skriptom pravilnika za izklopno skupino ali po načrtih, ki ga načrtuje. (Preden nastavite samodejno brisanje profilov, skrbno preizkusite skript v svojem okolju!).

Skript lahko spremenite tako, da samodejno izbriše uporabnike vseh uporabnikov, ki so dodani v določeno skupino oglasov (na primer skupino DisabledUsers):

$ users = Get-ADGroupMember -Identity DisabledUsers | Foreach $ _. Sid.Value
$ profile = Get-WmiObject Win32_UserProfile
$ profili | Kje $ users -eq $ _. Sid | Foreach $ _. Delete ()