Cómo obtener la lista de perfiles de usuario en una computadora local y remota

Si tiene varios usuarios que comparten una computadora con usted, puede preguntarse cuántos usuarios tienen realmente los perfiles de usuario configurados en su computadora y dónde se encuentran estos perfiles de usuario. Aquí hay una forma genial que le permite averiguarlo usando PowerShell.

Ejecute el siguiente fragmento en su ventana de PowerShell y vea lo que obtiene.

$path="Registry::HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList*"
Get-ItemProperty -Path $path | Select-Object -Property PSChildName, ProfileImagePath

Lo que hace es recuperar la información de ProfileList del Registro de Windows y devolver el SID de cada usuario y su ubicación de perfil. Algo como esto:

Bastante ordenado, pero sería bueno si viéramos el real de las cuentas en lugar del SID. Básicamente, lo que tenemos que averiguar es cómo determinar a qué cuenta pertenece un SID. De acuerdo a esto Consejo de Technet, podemos usar el siguiente fragmento para obtener el nombre de la cuenta a la que pertenece un SID específico.

$objSID = New-Object System.Security.Principal.SecurityIdentifier("SID")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

Básicamente, crea una nueva instancia de la clase SecurityIdentifier con el SID en cuestión, luego usa el método Translate para convertir este SID en una instancia de NTAccount.

Entonces, ahora, debemos implementar este código en el primer fragmento que obtiene la información del registro. Esto es lo que se me ocurrió, que puede descargar al final de esta publicación.

$path="Registry::HKey_Local_MachineSoftwareMicrosoftWindows NTCurrentVersionProfileList*"
$items = Get-ItemProperty -path $path
Foreach ($item in $items) {
    $objUser = New-Object System.Security.Principal.SecurityIdentifier($item.PSChildName)
    $objName = $objUser.Translate([System.Security.Principal.NTAccount])
    $item.PSChildName = $objName.value
}
echo $items | Select-Object -Property PSChildName, ProfileImagePath

El resultado:

PowerShell obtenga la lista de perfiles de usuario con el nombre de la cuenta: cómo obtener la lista de perfiles de usuario en una computadora local y remota

Por supuesto, también puede usar el cuadro de diálogo Perfiles de usuario integrado para encontrar la misma o tal vez más información, pero debo admitir que es bastante bueno en PowerShell, ¿no es así?

/ Actualización el 27 de agosto de 2018 /

Existe una mejor manera de obtener una lista de perfiles de usuario en equipos locales y remotos, utilizando el cmdlet Get-WmiObject con Win32_UserProfile, como a continuación, para obtener la lista de perfiles de usuario en el equipo local.

Get-WmiObject -ClassName Win32_UserProfile

Para obtener la misma información de una computadora remota,

Get-WmiObject -ClassName Win32_UserProfile -ComputerName computername

Además, para obtener el perfil de usuario utilizado por el último usuario.

Get-WmiObject -ClassName Win32_UserProfile -ComputerName computerame | Sort-Object LastUseTime | Select-Object -Last 1

¿Necesita encontrar el nombre de la cuenta de usuario y el ID para ese perfil de usuario?

Get-ADUser (Get-WmiObject -ClassName Win32_UserProfile -ComputerName computername | Sort-Object LastUseTime | Select-Object -Last 1).sid

Deja un comentario