Eliminar perfiles de usuario con PowerShell y 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).

Los administradores del sistema de Windows tienen que lidiar con:

  • registros de usuario corruptos
  • archivos que necesitan ser compartidos entre todos los perfiles de usuario
  • averiguar cómo recrear perfiles corruptos
  • … y más

Lo que alguna vez fue una experiencia frustrante ha mejorado un poco con PowerShell. Aquí hay algunas formas en que PowerShell puede facilitar la administración de perfiles de usuario de Windows.

Administre e informe sobre Active Directory, Exchange y Microsoft 365 con ManageEngine ADManager Plus. ¡Descargue la versión de prueba gratuita!

Enumeración de Perfiles de Usuario

Es fácil echar un vistazo a los perfiles de usuario en el sistema de archivos en un único equipo Windows. Simplemente mire en la carpeta C:\Usuarios. Pero no solo no obtiene la imagen completa al hacer esto, sino que también es problemático debido a posibles problemas de acceso al sistema de archivos. Hay una mejor manera y es a través de WMI o CIM. En CIM, existe una clase llamada Win32_UserProfile. Esta clase contiene todos los perfiles que existen en una máquina y mucha otra información útil que una simple carpeta del sistema de archivos no le dirá.

Usando PowerShell, puede acceder a esta clase CIM con el comando Get-CimInstance.

A continuación, estoy buscando el primer perfil de usuario en la computadora local. Notarás muchos datos útiles como LastUseTime, SID y así sucesivamente.

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                   :

El cmdlet Get-CimInstance no solo funciona localmente sino también de forma remota. Al utilizar el parámetro ComputerName, puedes especificar 1, 10 o 100 computadoras remotas diferentes y consultará cada una de ellas sin problemas.

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

Eliminando Perfiles de Usuario

Una vez que entiendas cómo enumerar los perfiles de usuario en las computadoras, puedes llevarlo un paso más allá y también eliminar esos perfiles de usuario.

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.

La forma correcta de hacer esto es iniciar una eliminación a través de CIM.

Utilizando la misma clase CIM que acabas de repasar, es posible no solo ver perfiles sino también eliminarlos por completo. Esto es lo mismo que entrar en la ventana Perfiles de Usuario en la configuración del sistema y hacer clic en el botón Eliminar.

User Profiles

Para hacer esto, enumera los perfiles de usuario nuevamente y esta vez aplica un filtro para elegir un solo perfil de usuario para eliminar. En este caso, elimina el perfil de usuario llamado UserA. Puedes hacer esto utilizando el cmdlet Where-Object de PowerShell y alguna manipulación de cadenas para obtener el nombre de la carpeta de usuario de la propiedad LocalPath como se muestra a continuación.

Una vez que puedas reducir ese único perfil, puedes pasar esa instancia CIM al cmdlet Remove-CimInstance para cada objeto que devuelve Get-CimInstance. Este proceso eliminará el perfil de usuario del sistema de archivos y del registro.

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

De nuevo, si deseas extender esto a varias computadoras, simplemente utiliza el parámetro ComputerName en Get-CimInstance.

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

Administra e informa sobre Active Directory, Exchange y Microsoft 365 con ManageEngine ADManager Plus. ¡Descarga la prueba gratuita!

Resumen

Ahora has visto una manera fácil de enumerar y eliminar perfiles de usuario de Windows. Si no estabas al tanto de la clase CIM Win32_UserProfile, es posible que hayas estado relacionando la carpeta C:\Users<Nombre de Usuario> como el perfil, pero ahora debes saber que debes eliminar la instancia CIM Win32_UserProfile.

Puedes ver que hay mucho más en el perfil de usuario que una simple carpeta del sistema de archivos. Utiliza CIM la próxima vez que necesites consultar o eliminar perfiles de usuario de las computadoras con Windows en tu entorno.

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