Odstránenie starých užívateľských profilov Windows pomocou GPO alebo PowerShell

Na pracovných staniciach a serveroch Windows, najmä na terminálových serveroch RDS (Remote Desktop Services), je potrebné pravidelne čistiť adresár C: \ Users zo starých užívateľských profilov (prepustení používatelia, používatelia, ktorí server dlhšiu dobu nepoužívali atď.).

Hlavným problémom terminálových serverov je neustále zvyšovanie veľkosti adresárov užívateľských profilov na disku. Tento problém je čiastočne vyriešený pomocou politiky kvót veľkosti užívateľského profilu pomocou kvót FSRM alebo NTFS, roamingových priečinkov atď. Ale s veľkým počtom používateľov terminálového servera sa v priečinku C: \ Users časom hromadí veľké množstvo adresárov s nepotrebnými užívateľskými profilmi..

obsah:

  • Ručné odstránenie profilu používateľa v systéme Windows
  • Skupinová politika na automatické mazanie starých profilov
  • Vymazanie servera zo starých užívateľských profilov pomocou PowerShell

Ručné odstránenie profilu používateľa v systéme Windows

Mnoho nováčikov sa snaží manuálne odstrániť adresár s užívateľským profilom zo zložky C: \ Users. To je možné vykonať, ak po odstránení priečinka ručne vymažete časť užívateľského profilu s odkazom na adresár v vetve registra HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Správny ručný spôsob, ako odstrániť užívateľský profil vo Windows, je otvoriť vlastnosti systému, prejdite na Pokročilé systémové nastavenia -> Užívateľské profily -> nastavenie, vyberte užívateľský profil v zozname používateľov (stĺpec Veľkosť označuje veľkosť používateľského profilu) a kliknite na tlačidlo delete.

Je to však manuálny spôsob, ale chcem automatizáciu.

Skupinová politika na automatické mazanie starých profilov

Systém Windows má zabudovanú skupinovú politiku na automatické odstránenie starých profilov používateľov starších ako xx dní. Táto politika je v časti. Konfigurácia počítača -> Administratívne šablóny -> Systém -> Užívateľské profily (Konfigurácia počítača -> Šablóny pre správu -> Systém -> Profily používateľov) a nazýva sa „Odstráňte užívateľské profily po reštarte po zadanom počte dní“(Vymazať užívateľské profily staršie ako zadaný počet dní pri reštarte systému). Túto možnosť môžete povoliť v miestnom editore politík (gpedit.msc) alebo pomocou politík domény z konzoly GPMC.msc..

Povoľte túto zásadu a určte, po koľkých dňoch je užívateľský profil považovaný za neaktívny. Služba „Windows User Profile Service“ môže takýto profil automaticky odstrániť, keď sa reštartuje. Spravidla sa oplatí špecifikovať najmenej 45 - 90 dní.

Pri používaní tejto politiky musíte mať istotu, že keď vypnete / reštartujete server, nevyskytnú sa žiadne problémy so systémovým časom (čas sa nezastaví), inak môžu byť aktívne užívateľské profily odstránené.

Hlavné problémy s touto metódou automatického zúčtovania profilov čakajú na reštart servera a sú neselektívne (nemôžete zabrániť vymazaniu určitých profilov, napríklad miestnych účtov, správcov atď.). Toto pravidlo tiež nemusí fungovať, ak nejaký softvér tretích strán (najčastejšie je to antivírusový program) pristupuje k súboru NTUSER.DAT v užívateľských profiloch a aktualizuje dátum posledného použitia..

Vymazanie servera zo starých užívateľských profilov pomocou PowerShell

Namiesto použitia politiky na automatické čistenie vyššie uvedených profilov môžete na vyhľadanie a odstránenie profilov neaktívnych alebo blokovaných používateľov použiť jednoduchý skript PowerShell..

Najprv sa pokúsime vypočítať veľkosť profilu každého používateľa v priečinku C: \ Users pomocou jednoduchého skriptu z článku „Veľkosť výstupnej zložky pomocou PowerShell“:

gci -force 'C: \ Users'-ErrorAction SilentlyContinue | ? $ _ -is [io.directoryinfo] | %
$ len = 0
gci -recurse -force $ _. fullname -ErrorAction SilentlyContinue | % $ len + = $ _. length
$ _. celé meno, '0: N2 GB' -f ($ len / 1Gb)
$ suma = $ suma + $ len

„Celková veľkosť profilu“, '0: N2 GB' -f ($ suma / 1Gb)

Celková celková veľkosť všetkých používateľských profilov v adresári C: \ Users je približne 22 GB.

Teraz uvedieme zoznam používateľov, ktorých profil sa nepoužíval dlhšie ako 60 dní. Na vyhľadávanie môžete použiť hodnotu poľa profilu LastUseTime..

Get-WMIObject -class Win32_UserProfile | Kde (! $ _. Special) - a ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-60)) | Measure-Object

Na terminálovom serveri som mal 143 profilov neaktívnych používateľov (celková veľkosť približne 10 GB).

Ak chcete odstrániť všetky tieto profily, jednoducho pridajte presmerovanie zoznamu do príkazu Remove-WmiObject (pred použitím skriptu Delete je vhodné skontrolovať jeho výstup pomocou parametra -WhatIf):

Get-WMIObject -class Win32_UserProfile | Kde (! $ _. Special) - a (! $ _. Loaded) - a ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-30)) | Odstráňte-WmiObject -WhatIf

Aby ste neodstránili profily niektorých používateľov, napríklad špeciálne účty systémových a sieťových služieb, účet miestneho správcu, používateľov s aktívnymi reláciami, zoznam výnimočných účtov), ​​musíte skript upraviť takto:

# Zoznam účtov, ktorých profily nemožno odstrániť
$ ExcludedUsers = "Public", "zenoss", "svc", "user_1", "user_2"
$ LocalProfiles = Get-WMIObject -class Win32_UserProfile | Kde (! $ _. Special) - a (! $ _. Loaded) - a ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-60))
foreach ($ LocalProfile v $ LocalProfiles)

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

$ LocalProfile | Remove-WmiObject
Napíšte hostiteľa $ LocalProfile.LocalPath, „profil odstránený“ -ForegroundColor Magenta

Spustenie tohto skriptu môžete nakonfigurovať pomocou skriptu politiky vypínania skupín alebo podľa plánu plánovača. (Pred nastavením automatického mazania profilov starostlivo otestujte skript vo svojom prostredí!).

Skript môžete upraviť tak, aby automaticky odstraňoval používateľov všetkých používateľov, ktorí boli pridaní do konkrétnej skupiny AD (napríklad skupina DisabledUsers):

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