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 do sistema Windows precisam 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 muito mais

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

Gerencie e Relate o Active Directory, Exchange e Microsoft 365 com o ManageEngine ADManager Plus. ¡Baixe a versão de 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 olhar na pasta C:\Users. Mas não apenas você não obtém o quadro completo 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 esta 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 funciona apenas 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

Depois de entender como enumerar perfis de usuários em computadores, você pode ir um passo além e excluir esses perfis de usuários 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 a remoção via CIM.

Usando a mesma classe CIM que você acabou de revisar, é possível não apenas visualizar os perfis, mas também removê-los completamente. Isso é o mesmo que ir para a 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, como mostrado abaixo.

Uma vez que você consiga reduzir para esse único perfil, você pode passar essa instância CIM para o cmdlet Remove-CimInstance para cada objeto que o Get-CimInstance retorna. 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 você quiser 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 versão de avaliação gratuita!

Resumo

Você viu agora 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, talvez estivesse correlacionando a pasta C:\Users<Username> 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 Windows em seu ambiente.

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