Как удалить профиль пользователя windows server 2012

Удаление старых профилей пользователей Windows с помощью GPO или PowerShell

На рабочих станциях и серверах Windows, особенно на терминальных серверах RDS (Remote Desktop Services), периодически возникает необходимость очистки каталога C:\Users от старых профилей пользователей (уволенные пользователи, пользователи, которые долго не используют сервер и т.д.).

Основная проблема терминальных серверов – постоянный рост размеров каталогов профилей пользователей на диске. Частично эта проблема решается политиками квотирования размера профиля пользователя с помощью FSRM или NTFS квот, перемещаемыми папками и т.д. Но при большом количестве пользователей терминального сервера в папке C:\Users со временем накапливается огромное количество каталогов с ненужными профилями пользователей.

Ручное удаление профиля пользователя в Windows

Многие начинающиеся администраторы пытаются вручную удалить каталог с профилем пользователя из папки C:\Users. Так можно делать, если вы после удаления папки вручную удалите раздел профиля пользователя со ссылкой на каталог в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProfileList. Правильный ручной способ удаления профиля пользователя в Windows – открыть свойства системы, перейти в Advanced System Settings -> User Profiles -> Settings, выбрать в списке пользователя (в столбце Size указан размер профиля пользователя) и нажать кнопку Удалить.

Но это ручной способ, а хочется автоматизации.

Групповая политика автоматического удаления старых профилей

В Windows есть встроенная групповая политика для автоматического удаления старых профилей пользователей старше xx дней. Эта политика находится в разделе Конфигурация компьютера -> Административные шаблоны -> Система -> Профили пользователей (Computer Configuration -> Administrative Templates -> System -> User Profiles) и называется “Удалять при перезагрузке системы профили пользователей по истечении указанного числа дней” (Delete user profiles older than a specified number days on system restart). Вы можете включить этот параметр в локальном редакторе политик (gpedit.msc) или с помощью доменных политик из консоли GPMC.msc.

Включите политику и укажите через сколько дней профиль пользователя считается неактивным и “Служба профилей пользователей Windows” можно автоматически удалить такой профиль при следующей перезагрузке. Обычно тут стоит указать не менее 45-90 дней.

Основные проблемы такого способа автоматической очистки профилей – ожидание перезагрузки сервера и неизбирательность (вы не можете запретить удаление определенных профилей, например, локальных учетных записей, администраторов и т.д.). Также эта политика может не работать, если некоторое стороннее ПО (чаще всего это антивирус) обращается к файлу NTUSER.DAT в профилях пользователей и обновляет дату последнего использования.

Очистка сервера от старых профилей пользователей с помощью PowerShell

Вместо использования рассмотренной выше политики автоматической очистки профилей, вы можете использовать простой PowerShell скрипт для поиска и удаления профилей неактивных или заблокированных пользователей.

Сначала попробуем подсчитать размер профиля каждого пользователя в папке C:\Users c помощью простого скрипта из статьи “Вывести размер папок с помощью 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
>
“Общий размер профилей”,’ <0:n2>GB’ -f ($sum / 1Gb)

Итого суммарный размер всех профилей пользователей в каталоге C:\Users около 22 Гб.

Теперь выведем список пользователей, профиль которых не использовался более 60 дней. Для поиска можно использовать значение поля профиля LastUseTime.

У меня на терминальном сервере оказалось 143 профиля неактивных пользователей (общим размером около 10 Гб).

Читайте также:  Как открыть песочницу windows

Чтобы удалить все эти профили достаточно добавить перенаправить список на команду Remove-WmiObject (перед использование скрипта удаления желательно несколько раз перепроверить его вывод с помощью параметра –WhatIf ):

Чтобы не удалять профили некоторых пользователей, например, специальные аккаунты System и Network Service, учетную запись локального администратора, пользователей с активными сессиями, список аккаунтов-исключений), нужно модифицировать скрипт следующим образом:

#Список аккаунтов, чьи профили нельзя удалять
$ExcludedUsers =»Public»,»zenoss»,»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, «профиль удален” -ForegroundColor Magenta
>
>

Вы можете настроить запуск этого скрипта через shutdown скрипт групповой политики или по расписанию заданием планировщика. (перед настройкой автоматического удаления профилей внимательно протестируйте скрипт в своей среде!).

Можно модифицировать скрипт, чтобы автоматически удалять пользователи всех пользователей, которые добавлены в определенную группу AD (например, группа DisabledUsers):

Удаляем учетные записи на Windows серверах.

Иногда, когда приходит письмо от отдела кадров об увольнении сотрудника.

Я руководствуюсь следующим порядком:

Первым делом блокирую учетную запись сроком на 1 месяц .

На иконке My Computer правой кнопкой мыши, далее ManageComputer ManagementLocal Users and GroupsUsers.

Таких сотрудников накапливается множество.

Выводим список заблокированных учетных записей через wmi – запрос :

wmic useraccount where (Status=’Degraded’) get Caption

Далее, удаляем учетную запись :

Net user /delete

, где берем данные из предыдущего вывода.

, но даже после этого удаления остаются данные профиля и помечаются, как Account Unknown . Для их удаления переходи: — на иконке My Computer правой кнопкой мыши, далее PropertiesAdvancedUser ProfilesSettings

На каждой нажимаем Delete.

Вот на этом можно считать, что с удаление мы справились. Способ не автоматизированный. Но действующий.

Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:

Поблагодари автора и новые статьи

будут появляться чаще 🙂

Карта МКБ: 4432-7300-2472-8059
Yandex-деньги: 41001520055047

Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.

Как удалить профиль пользователя windows server 2012

Добрый день! Уважаемые читатели и гости одного из популярных блогов по системному администрированию Pyatilistnik.org. В прошлый раз мы с вами научились ремонтировать кнопку пуск в Windows Server 2016 на одном из RDSH хостов. Сегодня я бы хотел еще поговорить на тему обслуживания терминальной фермы, а именно хочу вас научить производить автоматическую очистку ваших хостов от старых перемещаемых профилей, которые со временем могут накапливаться и занимать ощутимое количество дискового пространства. Думаю это будет полезно для тех, кто только знакомится с технологией RDS.

Постановка задачи

Задача ставиться таким образом, у вас есть ферма Remote Desktop Services High Availability на базе Windows Server 2019, которую используют 500 пользователей. У сотрудников перемещаемые профили (могут быть и локальные все зависит от задачи), это подразумевает, что сегодня они подключаются к одному серверу, а завтра к другому, тем самым оставляя дополнительный неиспользуемый объем на RDSH хостах. Именно эти уже не используемые профили я и хочу удалять по заданным критериям, например удалять все профили старше 3-5 дней.

Методы для автоматического удаления профилей пользователей

Я могу выделить три метода позволяющие нам удалить профиль пользователя по заданным критериям:

  • С помощью групповой политики
  • С помощью утилиты Delprof2: User Profile Deletion Tool
  • Через PowerShell

Удаление устаревших профилей через GPO

Первый метод, довольно таки топорный, хоть и централизованный. Суть метода заключается в том, что вы настраиваете определенную настройку в групповых политиках, которая при перезагрузке сервера будет смотреть как долго не обращались к профилю, и если эта дата больше заданной в настройках GPO, то профиль будет удаляться с сервера. Эта политика полезная, если у вас особо не большая RDS ферма и у вас хотя бы раз в месяц происходит обслуживание серверов, например для установки обновлений или обновления Vmware Tools. Если вы хотите настроить политику, то нужный вам раздел находится по пути:

Читайте также:  Что такое текущий каталог линукс

Далее производим обновление групповых политик и проверяем на тестовом сервере, либо можете перевести любой из RDSH хостов в режим стока и проверить на нем.

Удаление устаревших профилей через Delprof2: User Profile Deletion Tool

Второй метод, который подошел мне, это использование бесплатной утилиты Delprof2: User Profile Deletion Tool. Delprof2 удаляет неактивные профили пользователей. Если вы хотите освободить место на диске, просто запустите его без параметров, и он удалит все профили, кроме вашего собственного, и некоторые специальные профили, необходимые для операционной системы. Delprof2 имеет дополнительные параметры фильтрации: вы можете удалить только локально кэшированные копии перемещаемых профилей или удалить только те профили, которые не использовались в течение указанного количества дней. Delprof2 делает все как в локальной системе, так и удаленно.

Профили пользователей часто имеют разрешения, установленные для них таким образом, что даже администраторы не имеют доступа без предварительной обработки ACL. Delprof2 обходит это требование, используя права резервного копирования и восстановления для анализа и удаления даже самых надежно защищенных профилей.

Некоторые программы хранят файлы по пути, длина которого превышает 260 символов. Большинство инструментов не могут работать с такими путями, длина которых превышает значение MAX_PATH (260). Проводник Windows — яркий тому пример. Delprof2, с другой стороны, использует специальные API, чтобы иметь возможность удалять файлы в самых удаленных областях вашего жесткого диска.

Скачать Delprof2: User Profile Deletion Tool

Загрузить последнюю версию утилиты вы можете либо у меня с mail облака или же с официального сайта:

Далее вам необходимо разархивировать zip архив. На выходе у вас появится папка с двумя файлами:

  • Changelog — файл с описанием, что изменилось
  • DelProf2 — сам файл утилиты

Откройте командную строку и перейдите в ней в папку с утилитой DelProf2.exe, далее выполните команду:

В результате этих не хитрых действий у вас появится справка по утилите, со всеми доступными ключами.

  • /l — Перечисление профилей доступных для удаления, но удалено ничего не будет, это такой режим, что было бы (what-if mode)

  • /u — Данный ключ не будет требовать подтверждения при удалении и без просмотра
  • /q — Тихое удаление без вывода и подтверждения
  • /p — Запрашивать подтверждение перед удалением каждого профиля
  • /r — Удалить локальные кэши только перемещаемых профилей, но не локальных профилей
  • /c — Удалить на удаленном компьютере
  • /d — Удалить только профили, которые не использовались в течение x дней
  • /ntuserini — При определении возраста профиля для /d используйте файл NTUSER.INI вместо NTUSER.DAT для расчета возраста
  • /ed — Исключить каталоги профилей, имя которых соответствует определенному шаблону с помощью подстановочных знаков * и ?. Может использоваться более одного раза и может сочетаться с /id
  • /id — Включить только каталоги профилей, имя которых соответствует некому шаблону, можно использовать подстановочные знаки * и ?. Может использоваться более одного раза и может сочетаться с /ed
  • /i — Игнорировать ошибки, продолжить удаление

Примеры использования Delprof2: User Profile Deletion Tool

Чем хороша данная утилита, так это тем, что может вызываться и работать как удаленно, так и локально. В моей основной задаче мне необходимо именно удаленное удаление профилей.

  • Для начала я хочу посмотреть список профилей на удаленном сервере, сделать это можно через команду:

тут мы вывели список профилей на сервере svt2019s01, к сожалению с русскими логинами утилита может показывать кракозябры. Тут так же видно, какие из профилей используются в данный момент, они имеют статус (reason: in use).

  • Посмотреть профили на удаленном сервере старше определенного количества дней, в моем примере это 5 дней.
Читайте также:  Bat файл кодировка windows

Как видим из списка был убран профиль sem.

  • Произведем удаление профилей старше 5 дней на удаленном сервере, добавим в команду ключ /u, не требующий подтверждения и убираем ключ /l.

Выведем список профилей и удостоверимся, что все было удалено.

  • Если нужно удалить на сервере только перемещаемые профили, а локальные не трогать, то мы должны добавить ключ /r

Так как в моем примере нет перемещаемых профилей, то команда вернула пустой результат, но уведомила, что все профили локальные.

    • Чтобы логировать все действия по удалению, то вы можете добавить вот такую конструкцию в DelProf2.

Если нужно сделать список серверов, то можно в файле написать так:

Delprof2 /c:svt2019s02/d:5 /u > svt2019s01log_%DATE%.txt

Delprof2 /c:svt2019s03 /d:5 /u > svt2019s01log_%DATE%.txt

Как видите сами команды очень простые. Чтобы автоматизировать такой аудит профилей с последующим удалением, я вам рекомендую создать простой bat файл с нужной командой

и запускать его из планировщика Windows по расписанию. Лично я произвожу запуск каждый день в 23-00, выглядит это вот так.

Удаление профилей через PowerShell

Существует уже ряд готовых скриптов PowerShell, которые могут вам помочь в удалении старых профилей пользователей. Первый скрипт от Microsoft, я так же брал его за основу своего.

Для запуска скрипта откройте оболочку PowerShell. Далее загрузите скрипт по ссылке выше или ниже скачайте мой архив с двумя скриптами, распакуйте zip-архив. Давайте для начала выведем справку, выполните команду:

Если у вас выскакивает ошибка «так как выполнение скриптов запрещено для данной системы (Execution of scripts was prohibited)«, то перейдите по ссылке (Set-ExecutionPolic) и разрешите данное действие.

Как видите тут есть ключи:

  • ListUnusedDay — показывает за какой срок нужно показывать неиспользуемые профили
  • ListAll — показать все профили
  • DelereUnuseDay — Удалить профили неиспользуемые определенное количество дней

Давайте для начала посмотрим профили которые старше 5 дней, для этого выполните:

Теперь посмотрим вообще все профили хранящиеся на данном сервере, через ключ -ListAll

Теперь удалим профили старше 5 дней, через ключ -DeleteUnusedDay, у вас выскочит подтверждение.

Все это замечательно если у вас один сервер, так же недостатком данного скрипта будет подтверждение удаления. Для более массовых работ есть второй скрипт, скачать его можно по ссылке ниже:

У данного скрипта такие же ключи:

  • ListUnusedDay — показывает за какой срок нужно показывать неиспользуемые профили;
  • ListAll — показать все профили;
  • DelereUnuseDay — Удалить профили неиспользуемые определенное количество дней;

Откройте его с помощью PowerShell ISE. Тут есть два важных момента:

  1. Теперь при удалении у вас не будет спрашиваться подтверждение
  2. У вас есть возможность подсовывать список хостов, в виде перечисления или же через файл

Давайте подготовим файл с хостами, главное чтобы они резолвились через ваш DNS сервер.

Далее вам нужно раскомментировать строку с Get-Content и указать путь до вашего текстового файла со списком серверов.

Запустим скрипт через команду:

Ключ -ListAll выводит все профили пользователей попадающие под критерии удаления. Количество дней устаревания вы можете задать через параметр «$Computername -ListUnusedDay 10«. Если на хосте из списка не будет профилей попадающих под ваши критерии, то вы получите желтое уведомление » Предупреждение: The item not found «. Как видите я поигрался с количеством дней, поэтому и разные списки профилей.

так же добавим ключ для удаления:

В результате удалим профили всех, у кого они старше 5 дней.

Вызов Pelprof через PowerShell

При запуске приведенного ниже сценария все, что вам нужно сделать, это ввести имя хоста рабочих станций и имя папки профиля, то есть имя пользователя учетной записи.

Не забываем поместить утилиту pelprof2 в нужное вам место, и поменять это в скрипте.

Оцените статью