Премахване на стари потребителски профили на Windows с помощта на GPO или PowerShell

На работните станции и сървърите на Windows, особено на терминалните сървъри RDS (Remote Desktop Services), периодично има нужда от почистване на директорията C: \ Потребители от стари потребителски профили (освободени потребители, потребители, които не използват сървъра от дълго време и т.н.).

Основният проблем на терминалните сървъри е постоянното увеличаване на размера на директории на потребителски профил на диска. Този проблем частично се решава от политиките за квоти за потребителски профил с използване на FSRM или NTFS квоти, роуминг папки и т.н. Но при голям брой потребители на терминални сървъри, огромен брой директории с ненужни потребителски профили се натрупват с течение на времето в папката C: \ Потребители.

Съдържание:

  • Изтрийте ръчно потребителски профил в Windows
  • Групова политика за автоматично изтриване на стари профили
  • Изчистване на сървъра от стари потребителски профили с помощта на PowerShell

Изтрийте ръчно потребителски профил в Windows

Много начинаещи администратори се опитват ръчно да изтрият директорията с потребителския профил от папката C: \ Потребители. Това може да стане, ако след изтриването на папката ръчно изтриете секцията с потребителски профил с връзка към директорията в клона на системния регистър HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Правилният ръчен начин за изтриване на потребителски профил в Windows е да отворите свойствата на системата, отидете на Разширени системни настройки -> Потребителски профили -> Настройки, изберете потребителския профил в списъка с потребители (колоната Размер показва размера на потребителския профил) и щракнете Изтриване.

Но това е ръчен начин, но искам автоматизация.

Групова политика за автоматично изтриване на стари профили

Windows има вградена групова политика за автоматично изтриване на стари потребителски профили, по-стари от xx дни. Тази политика е в раздела. Компютърна конфигурация -> Административни шаблони -> Система -> Потребителски профили (Конфигурация на компютъра -> Административни шаблони -> Система -> Потребителски профили) и се нарича „Изтрийте потребителските профили при рестартиране след определен брой дни”(Изтриване на потребителски профили, по-стари от определен брой дни при рестартиране на системата). Можете да активирате тази опция в локалния редактор на политики (gpedit.msc) или като използвате политики за домейни от конзолата GPMC.msc.

Активирайте правилото и посочете след колко дни потребителският профил се счита за неактивен и „Услугата за потребителски профил на Windows“ може автоматично да изтрие такъв профил следващия път, когато го рестартира. Обикновено си струва да посочите поне 45-90 дни.

Когато използвате тази политика, трябва да сте сигурни, че когато изключите / рестартирате сървъра няма проблеми със системното време (времето не се губи), в противен случай активните потребителски профили могат да бъдат изтрити.

Основните проблеми с този метод за автоматично изчистване на профилите са изчакване за рестартиране на сървъра и неселективност (не можете да предотвратите изтриването на определени профили, например, локални акаунти, администратори и т.н.). Също така тази политика може да не работи, ако някой софтуер на трета страна (най-често това е антивирус) има достъп до файла NTUSER.DAT в потребителски профили и актуализира датата на последната употреба.

Изчистване на сървъра от стари потребителски профили с помощта на PowerShell

Вместо да използвате правилата за автоматично почистване на профилите, разгледани по-горе, можете да използвате прост скрипт PowerShell, за да намерите и изтриете профили на неактивни или блокирани потребители.

Първо ще се опитаме да изчислим размера на потребителския профил на всеки потребител в папката C: \ Потребители, използвайки обикновен скрипт от статията „Размер на папката на изхода с помощта на PowerShell“:

gci -force 'C: \ Users'-ErrorAction SilentlyContinue | ? $ _ -ие [io.directoryinfo] | %
$ len = 0
gci -recurse -force $ _. fullname -ErrorAction SilentlyContinue | % $ len + = $ _. дължина
$ _. пълно име, '0: N2 GB' -f ($ len / 1Gb)
$ sum = $ sum + $ len

„Общ размер на профила“, „0: N2 GB“ -f ($ сума / 1Gb)

Общият общ размер на всички потребителски профили в директорията C: \ Потребители е около 22 GB.

Сега ще изброим потребителите, чийто профил не се използва повече от 60 дни. Можете да използвате стойността на полето за профил LastUseTime за търсене..

Get-WMIObject -клас Win32_UserProfile | Къде (! $ _. Special) -and ($ _. ConvertToDateTime ($ _. LastUseTime) -lt (Get-Date) .AddDays (-60)) | Мярка-Object

Имах 143 профила на неактивни потребители на терминалния сървър (общ размер около 10 GB).

За да премахнете всички тези профили, просто добавете пренасочване на списъка към командата Remove-WmiObject (преди да използвате скрипта за изтриване, препоръчително е да проверите двукратно неговия изход с параметъра -WhatIf):

Get-WMIObject -клас Win32_UserProfile | Къде (! $ _. Специален) -и (! $ _. Натоварен) -и ($ _. Конвертиране на дата ($ _. LastUseTime) -lt (get-дата) .AddDays (-30)) | Премахване-WmiObject -WhatIf

За да не изтривате профили на някои потребители, например специални акаунти за системни и мрежови услуги, акаунт на локален администратор, потребители с активни сесии, списък на акаунти за изключения), трябва да промените скрипта, както следва:

# Списък на акаунти, чиито профили не могат да бъдат изтрити
$ ExcludedUsers = "Обществено", "zenoss", "svc", "user_1", "user_2"
$ LocalProfiles = Get-WMIObject -клас Win32_UserProfile | Къде (! $ _. Специален) -и (! $ _. Натоварен) -и ($ _. Конвертиране на дата ($ _. LastUseTime) -lt (get-дата) .AddDays (-60))
foreach ($ LocalProfile в $ LocalProfiles)

if (! ($ ExcludedUsers -подобни $ LocalProfile.LocalPath.Replace ("C: \ Users \", "")))

$ LocalProfile | Remove-WmiObject
Напишете хост $ LocalProfile.LocalPath, „профилът е изтрит“ -ForegroundColor Magenta

Можете да конфигурирате стартирането на този скрипт чрез скрипта за групови правила за изключване или по график на планиращия. (Преди да настроите автоматично изтриване на профили, внимателно тествайте скрипта във вашата среда!).

Можете да промените скрипта, за да изтриете автоматично потребителите на всички потребители, които са добавени към определена група AD (например групата DisabledUsers):

$ users = Get-ADGroupMember -Identity DisabledUsers | Foreach $ _. Sid.Value
$ profili = Get-WmiObject Win32_UserProfile
$ профили | Къде $ потребители -eq $ _. Sid | Foreach $ _. Delete ()