Удалить профили пользователей с помощью PowerShell и CIM

A common pain point in an IT administrator’s career is user profiles. User profiles are a ubiquitous part of a Windows IT pro’s life; especially those that manage virtual desktop environments like Remote Desktop Services (RDS) or Citrix. In this post, I’m going to demonstrate a way you take out your aggression by using PowerShell to delete user profiles (and discover them).

Системные администраторы Windows должны иметь дело с:

  • поврежденными файлами реестра пользователей
  • файлами, которые необходимо разделять между всеми профилями пользователей
  • выяснением, как воссоздать поврежденные профили
  • …и многим другим

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

Управление и отчетность по Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Скачайте бесплатную пробную версию!

Перечисление профилей пользователей

Легко взглянуть на профили пользователей в файловой системе на одном компьютере под управлением Windows. Просто посмотрите в папке C:\Users. Но не только вы не получаете полной картины, когда делаете это, это также проблематично из-за потенциальных проблем с доступом к файловой системе. Есть лучший способ, и это через WMI или CIM. В CIM существует класс Win32_UserProfile. Этот класс содержит все профили, которые существуют на компьютере, и много другой полезной информации, которую простая папка файловой системы вам не расскажет.

С помощью PowerShell вы можете получить доступ к этому классу CIM с помощью команды Get-CimInstance.

Ниже я нахожу первый профиль пользователя на локальном компьютере. Вы заметите множество полезной информации, такой как LastUseTime, SID и так далее.

PS C:\> Get-CimInstance -ClassName win32_userprofile | Select-Object -First 1


AppDataRoaming                   : Win32_FolderRedirectionHealth
Contacts                         : Win32_FolderRedirectionHealth
Desktop                          : Win32_FolderRedirectionHealth
Documents                        : Win32_FolderRedirectionHealth
Downloads                        : Win32_FolderRedirectionHealth
Favorites                        : Win32_FolderRedirectionHealth
HealthStatus                     : 3
LastAttemptedProfileDownloadTime :
LastAttemptedProfileUploadTime   :
LastBackgroundRegistryUploadTime :
LastDownloadTime                 :
LastUploadTime                   :
LastUseTime                      : 3/14/2019 3:06:39 PM
Links                            : Win32_FolderRedirectionHealth
Loaded                           : False
LocalPath                        : C:\Users\.NET v4.5 Classic
Music                            : Win32_FolderRedirectionHealth
Pictures                         : Win32_FolderRedirectionHealth
RefCount                         :
RoamingConfigured                : False
RoamingPath                      :
RoamingPreference                :
SavedGames                       : Win32_FolderRedirectionHealth
Searches                         : Win32_FolderRedirectionHealth
SID                              : S-1-5-82-3876422241-1344743610-1729199087-774402673-2621913236
Special                          : False
StartMenu                        : Win32_FolderRedirectionHealth
Status                           : 0
Videos                           : Win32_FolderRedirectionHealth
PSComputerName                   :

Команда Get-CimInstance не только работает локально, но и удаленно. Используя параметр ComputerName, вы можете указать 1, 10 или 100 различных удаленных компьютеров, и она с удовольствием запросит каждый из них.

PS C:\> Get-CimInstance -ClassName Win32_UserProfile -ComputerName localhost,WINSRV

Удаление профилей пользователя

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

I can’t count how many times I’ve had to delete user profiles because something got corrupted and I just needed the user to log in again and recreate it. At one time, I would simply have the user log off and remove the C:\Users<UserName> folder from the file system. Usually it works, sometimes it didn’t. What I didn’t realize was that I was actually leaving some remnants behind.

Правильный способ сделать это – инициировать удаление через CIM.

Используя тот же класс CIM, который вы только что рассмотрели, можно не только просматривать профили, но и полностью удалять их. Это то же самое, что и переход в Профили пользователей в настройках системы и нажатие Удалить кнопка.

User Profiles

Для этого снова перечислите профили пользователей, и на этот раз примените фильтр, чтобы выбрать один профиль пользователя для удаления. В этом случае удалите профиль пользователя с именем UserA. Вы можете сделать это, используя командлет Where-Object PowerShell и некоторую строковую манипуляцию, чтобы получить имя папки пользователя из свойства LocalPath, как показано ниже.

Как только вы сможете узкоспециализировать этот единственный профиль, вы можете передать этот экземпляр CIM в командлет Remove-CimInstance для каждого объекта, который возвращает Get-CimInstance. Этот процесс удалит профиль пользователя из файловой системы и реестра.

Get-CimInstance -Class Win32_UserProfile | Where-Object { $_.LocalPath.split('\')[-1] -eq 'UserA' } | Remove-CimInstance

Снова, если вы хотите расширить это на несколько компьютеров, вы просто используете параметр ComputerName на Get-CimInstance.

Get-CimInstance -ComputerName SRV1,SRV2,SRV3 -Class Win32_UserProfile | Where-Object { $_.LocalPath.split('\')[-1] -eq 'UserA' } | Remove-CimInstance

Управляйте и отчитывайтесь о каталоге Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Скачайте бесплатную пробную версию!

Резюме

Теперь вы видели простой способ перечисления и удаления профилей пользователей Windows. Если вы не были в курсе класса CIM Win32_UserProfile, вы могли рассматривать каталог C:\Users<Username> как профиль, но теперь вы должны знать, что нужно удалить экземпляр CIM Win32_UserProfile.

Вы видите, что профиль пользователя включает в себя гораздо больше, чем просто папка файловой системы. Используйте CIM, когда вам в следующий раз потребуется запросить или удалить профили пользователей с компьютеров под управлением Windows в вашей среде.

Source:
https://adamtheautomator.com/powershell-delete-user-profile/