Excluir perfis de usuário com 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).

administradores de sistema do Windows têm que lidar com:

  • registros de usuário corrompidos
  • arquivos que precisam ser compartilhados em todos os perfis de usuário
  • descobrir como recriar perfis corrompidos
  • … e mais

O que antes era uma experiência frustrante ficou um pouco menos frustrante com o PowerShell. Aqui estão algumas maneiras pelas quais o PowerShell pode facilitar a administração de perfis de usuário do Windows.

Gerencie e Relate o Active Directory, Exchange e o Microsoft 365 com o ManageEngine ADManager Plus. Baixe a avaliação gratuita!

Enumerando Perfis de Usuário

É fácil dar uma olhada nos perfis de usuário no sistema de arquivos em um único computador Windows. Basta procurar na pasta C:\Users. Mas, não apenas você não obtém a imagem completa ao fazer isso, também é problemático devido a possíveis problemas de acesso ao sistema de arquivos. Há uma maneira melhor e é através do WMI ou CIM. No CIM, existe uma classe chamada Win32_UserProfile. Esta classe contém todos os perfis que existem em uma máquina e muitas outras informações úteis que uma simples pasta no sistema de arquivos não informará.

Usando o PowerShell, você pode acessar essa classe CIM com o comando Get-CimInstance.

Abaixo, estou encontrando o primeiro perfil de usuário no computador local. Você notará muitas informações úteis, como LastUseTime, SID e assim por diante.

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                   :

O cmdlet Get-CimInstance não só funciona localmente, mas também remotamente. Ao usar o parâmetro ComputerName, você pode especificar 1, 10 ou 100 computadores remotos diferentes e ele consultará cada um deles felizmente.

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

Excluindo Perfis de Usuário

Uma vez que você entenda como enumerar perfis de usuário em computadores, pode levar isso um passo adiante e excluir esses perfis de usuário também.

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.

A maneira correta de fazer isso é iniciar uma remoção via CIM.

Usando a mesma classe CIM que você acabou de revisar, é possível não apenas visualizar perfis, mas também removê-los completamente. Isso é o mesmo que entrar na caixa de Perfis de Usuário nas configurações do Sistema e clicar no botão Excluir.

User Profiles

Para fazer isso, enumere os perfis de usuário novamente e desta vez aplique um filtro para escolher um único perfil de usuário para remover. Neste caso, remova o perfil de usuário chamado UserA. Você pode fazer isso usando o cmdlet Where-Object do PowerShell e alguma manipulação de string para pegar o nome da pasta do usuário da propriedade LocalPath, conforme mostrado abaixo.

Uma vez que você consiga identificar esse único perfil, pode passar essa instância CIM para o cmdlet Remove-CimInstance para cada objeto retornado pelo Get-CimInstance. Esse processo irá remover o perfil do usuário do sistema de arquivos e do registro.

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

Novamente, se desejar estender isso para vários computadores, basta usar o parâmetro ComputerName no Get-CimInstance.

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

Gerencie e Relate o Active Directory, Exchange e o Microsoft 365 com o ManageEngine ADManager Plus. ¡Baixe a avaliação gratuita!

Resumo

Agora você viu uma maneira fácil de enumerar e excluir perfis de usuário do Windows. Se você não estava ciente da classe CIM Win32_UserProfile, pode ter correlacionado a pasta C:\Users<NomeDoUsuário> como o perfil, mas agora você deve saber como excluir a instância CIM Win32_UserProfile.

Você pode ver que há muito mais no perfil do usuário do que uma simples pasta no sistema de arquivos. Use o CIM da próxima vez que precisar consultar ou excluir perfis de usuário de computadores com Windows em seu ambiente.

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