Encuentre el usuario actual que inició sesión en una computadora remota
Muy a menudo, un administrador necesita encontrar rápidamente el nombre de usuario registrado en una computadora remota con Windows. En este artículo, mostraremos algunas herramientas y scripts de PowerShell que pueden ayudarlo a obtener los nombres de los usuarios que iniciaron sesión en la computadora remota.
Comprobar usuarios registrados con PSLoggedOn y Qwinsta
SysInternals PSTools de Microsoft incluye una utilidad de consola llamada PSLoggedOn.exe que se puede usar para obtener el nombre del usuario que inició sesión en una computadora remota, así como una lista de sesiones SMB conectadas a ella.
Descarga la herramienta y ejecútala:
psloggedon \\RemoteCompNameComo puede ver, la herramienta devolvió el nombre del usuario que inició sesión (Usuarios que iniciaron sesión localmente) y una lista de usuarios que acceden a los recursos SMB de esta computadora a través de la red (Usuarios que iniciaron sesión a través de recursos compartidos).
Si desea obtener solo el nombre del usuario que inició sesión localmente, use la opción -l:
Psloggedon.exe \\pc1215wks1 -lPSLoggedOn se conecta al registro y verifica el nombre del usuario que inició sesión localmente. Para hacerlo, el servicio RemoteRegistry debe estar ejecutándose. Puede ejecutar y configurar el inicio automático del servicio mediante PowerShell:
Set-Service RemoteRegistry -startuptype automatic -passthru
Start-Service RemoteRegistryTambién puede obtener una lista de sesiones en una computadora remota usando el integrado
qwinstaherramienta. Esta herramienta debería ser familiar para cualquier administrador que gestione el entorno de terminal de Servicios de escritorio remoto (RDS). Para obtener una lista de las sesiones de usuario registradas desde una computadora remota, ejecute el comando:
qwinsta /server:be-rdsh01La herramienta devuelve una lista de todas las sesiones (activas y desconectadas por un tiempo de espera de RDP) en un servidor RDS o en una edición de escritorio de Windows 10 (11) (incluso si permitió múltiples conexiones RDP).
Si obtiene el Error 5 Acceso denegado al intentar conectarse a un servidor remoto usando qwinsta, asegúrese de que el host más remoto pueda administrar usuarios de forma remota a través de RPC. Si es necesario, habilítelo en el registro usando el siguiente comando o usando GPO:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v "AllowRemoteRPC" /t "REG_DWORD" /d "1" /f¿Cómo obtener el usuario actual en una computadora remota usando PowerShell?
Puede obtener el nombre del usuario que inició sesión en la computadora usando la clase WMI Win32_ComputerSystem. Abra la consola de PowerShell y ejecute el comando:
Get-WmiObject -class Win32_ComputerSystem | Format-List UsernameEl comando devuelve el nombre del usuario que inició sesión en la computadora.
El cmdlet Get-WmiObject tiene la opción -ComputerName que puede usar para acceder a objetos WMI en una computadora remota. El siguiente comando devolverá el nombre de usuario registrado desde la computadora remota:
(Get-WmiObject -class Win32_ComputerSystem -ComputerName pc1215wks1).UsernameEl comando muestra solo al usuario que inició sesión en la consola (no a través del RDP).
También puede usar PSRemoting para obtener información de equipos remotos con el cmdlet Invoke-Command.
Puede obtener solo el nombre de usuario en la computadora remota (sin un dominio), use estos comandos:
$userinfo = Get-WmiObject -ComputerName pc1215wks1 -Class Win32_ComputerSystem
$user = $userinfo.UserName -split '\\'
$user[1]En las versiones modernas de PowerShell Core (pwsh.exe), debe usar el cmdlet Get-CimInstance en lugar de Get-WmiObject:
Get-CimInstance -ComputerName pc1215wks1 -ClassName Win32_ComputerSystem | Select-Object UserNameO :
(Get-CimInstance -ComputerName pc1215wks1 -ClassName Win32_ComputerSystem).CimInstanceProperties | where{$_.Name -like "UserName"}| select valueGetCiminstance usa WinRM para conectarse a computadoras remotas, por lo que debe habilitar y configurar WinRM en ellas usando GPO o el siguiente comando:
WinRM quickconfigScript de PowerShell para buscar usuarios registrados en equipos remotos
Si desea recopilar información sobre usuarios que iniciaron sesión desde varias computadoras, puede usar la siguiente función de PowerShell para obtener nombres de usuario.
function Get-LoggedUser
{
[CmdletBinding()]
param
(
[string[]]$ComputerName
)
foreach ($comp in $ComputerName)
{
$output = @{'Computer' = $comp }
$output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName
[PSCustomObject]$output
}
}
Especifique los nombres de las computadoras en las que desea verificar los nombres de usuario con Get-LoggedUser:
Get-LoggedUser pc1215wks1,pc1215wks2,mun-dc01Si la función devuelve un nombre de usuario vacío para una computadora, significa que nadie ha iniciado sesión.
Puede obtener los nombres de los usuarios registrados en las computadoras en un dominio de Active Directory. Utilice el cmdlet Get-ADComputer para obtener la lista de equipos del dominio. En el siguiente ejemplo, obtendremos los nombres de usuario registrados en computadoras activas en la unidad organizativa del dominio específico. Para hacer que la secuencia de comandos funcione más rápido antes de acceder a una computadora remota, agregué una verificación de su disponibilidad mediante el ping de ICMP y el cmdlet Test-NetConnection:
function Get-LoggedUser
{
[CmdletBinding()]
param
(
[string[]]$ComputerName
)
foreach ($comp in $ComputerName)
{
if ((Test-NetConnection $comp -WarningAction SilentlyContinue).PingSucceeded -eq $true)
{
$output = @{'Computer' = $comp }
$output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName
}
else
{
$output = @{'Computer' = $comp }
$output.UserName = "offline"
}
[PSCustomObject]$output
}
}
$computers = (Get-AdComputer -Filter {enabled -eq "true"} -SearchBase 'OU=Berlin,DC=a-d,DC=com').Name
Get-LoggedUser $computers |ft -AutoSize
Además, tenga en cuenta que puede almacenar el nombre del usuario que inició sesión en las propiedades de la computadora en AD. Para hacerlo, puede usar un script de inicio de sesión descrito en el artículo "Set-ADComputer: Cómo agregar información de usuario a las propiedades de la computadora AD".
Después de eso, no necesita escanear todas las computadoras para encontrar dónde inició sesión un usuario específico. Puede encontrar una computadora de usuario usando una simple consulta a Active Directory:
$user='m.smith'
$user_cn=(Get-ADuser $user -properties *).DistinguishedName
Get-ADComputer -Filter "ManagedBy -eq '$user_cn'" -properties *|select name,description,managedBy|ft





