Comment identifier l’utilisateur actuellement connecté à un ordinateur distant

Récupérer les informations de l’utilisateur connecté à partir de machines Windows distantes peut parfois s’avérer fastidieux.

Quiconque a déjà dû identifier rapidement les utilisateurs connectés à une machine Windows distante sait que ce n’est pas toujours simple. Surtout lorsqu’on gère plusieurs serveurs ou postes de travail, on souhaite pouvoir voir rapidement qui est connecté, que ce soit localement ou via RDP. Les outils graphiques habituels peuvent être trop complexes ou indisponibles ; c’est là que les scripts et les outils en ligne de commande s’avèrent utiles. L’objectif est de disposer d’une méthode simple et fiable pour visualiser les utilisateurs connectés, notamment sur les systèmes distants, sans complications. Car, bien sûr, Windows a la fâcheuse habitude de compliquer les choses inutilement.

Comment vérifier les utilisateurs connectés avec des outils comme PSLoggedOn et qwinsta

Utilisation de PSLoggedOn.exe

Cet outil pratique de la suite SysInternals PSTools vous permet de voir qui est connecté localement et via des partages SMB sur une machine distante. Son utilité réside dans son accès au registre et aux sessions réseau. L’astuce principale consiste à s’assurer que le service RemoteRegistry est en cours d’exécution sur la machine cible ; sans cela, il ne pourra pas interroger le registre pour obtenir des informations utilisateur. Vous pouvez le démarrer ou le configurer en mode automatique avec PowerShell.

Set-Service RemoteRegistry -StartType Automatic -PassThru | Start-Service

Une fois cela réglé, il suffit d’exécuter :

psloggedon \\RemoteCompName

Cette commande affichera le nom d’utilisateur connecté localement ainsi que toutes les sessions SMB. Si vous souhaitez uniquement l’utilisateur local, ajoutez l’ option -l :

Psloggedon.exe \\pc1215wks1 -l

Parfois, sur certaines configurations, l’outil ne semble pas toujours récupérer les informations du premier coup. Il peut être nécessaire de redémarrer le PC distant ou le service s’il ne fournit pas les informations correctes. Mais généralement, il fonctionne une fois la configuration effectuée. Pratique pour des vérifications rapides, notamment lors de la gestion de plusieurs serveurs ou postes de travail.

Utilisation de qwinsta pour les informations de session

La commande intégrée qwinsta est un classique, bien connue de tous ceux qui administrent des environnements de bureau à distance. Elle affiche les sessions RDP actives et déconnectées sur un serveur ou un ordinateur de bureau. Pour l’exécuter, procédez comme suit :

qwinsta /server:be-rdsh01

Cette commande affiche les identifiants de session, les noms d’utilisateur et l’état des sessions. Si vous obtenez l’erreur « Erreur 5 : Accès refusé », cela signifie probablement que votre compte ne dispose pas des autorisations nécessaires ou que l’hôte cible n’est pas configuré pour autoriser la gestion RPC à distance. Pour résoudre ce problème, vous devrez peut-être modifier le registre ( ou utiliser cette commande) :

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v "AllowRemoteRPC" /t REG_DWORD /d 1 /f

Cela permet la gestion à distance des RPC, dont s’appuie qwinsta. Un redémarrage ou une mise à jour de la stratégie peut être nécessaire pour que les modifications soient prises en compte.

Comment obtenir l’utilisateur actuel sur une machine distante à l’aide de PowerShell

Une autre méthode consiste à utiliser les classes WMI de PowerShell, notamment Win32_ComputerSystem. C’est assez étrange, mais sur certaines configurations, seuls les utilisateurs connectés à la console s’affichent, et non ceux connectés via RDP. Pour ce faire, ouvrez PowerShell et exécutez :

Get-WmiObject -Class Win32_ComputerSystem | Format-List UserName

Cette fonction renvoie le nom d’utilisateur, mais uniquement pour la session de console physique. Pour cibler un ordinateur distant, ajoutez le paramètre -ComputerName :

(Get-WmiObject -Class Win32_ComputerSystem -ComputerName pc1215wks1).UserName

Remarque : il arrive que seules les sessions interactives locales s’affichent, et non les sessions RDP. Pour contourner ce problème, vous pouvez utiliser la communication à distance PowerShell. Utilisez Invoke-Command avec un bloc de script si nécessaire. Si vous utilisez PowerShell Core (via pwsh), la cmdlet Get-CimInstance remplace Get-WmiObject et utilise WinRM pour se connecter aux systèmes distants.

Get-CimInstance -ComputerName pc1215wks1 -ClassName Win32_ComputerSystem | Select-Object UserName

Assurez-vous que WinRM est activé sur tous les hôtes distants (exécutez la commande appropriée WinRM quickconfig) ; sinon, cela ne fonctionnera pas. Il est parfois nécessaire de revérifier les règles du pare-feu ou les paramètres de stratégie de groupe.

Obtenir la liste des utilisateurs connectés sur plusieurs ordinateurs

Gérer un domaine entier peut s’avérer fastidieux, car il faut vérifier chaque machine manuellement. Vous pouvez automatiser cette tâche à l’aide de PowerShell pour analyser plusieurs systèmes. Par exemple, une fonction simple qui effectue un ping et interroge une liste d’ordinateurs :

function Get-LoggedUser { param([string[]]$ComputerName) foreach ($comp in $ComputerName) { if ((Test-NetConnection $comp -WarningAction SilentlyContinue).PingSucceeded) { try { $user = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).UserName [PSCustomObject]@{ Computer = $comp UserName = $user } } catch { [PSCustomObject]@{ Computer = $comp UserName = "Error or no data" } } } else { [PSCustomObject]@{ Computer = $comp UserName = "Offline" } } } } # Usage: $computers = (Get-ADComputer -Filter * -SearchBase "OU=Berlin, DC=woshub, DC=com").Name Get-LoggedUser -ComputerName $computers | Format-Table -AutoSize 

Ainsi, vous pouvez voir qui est connecté et où, sans avoir à parcourir chaque machine manuellement. Ce n’est pas une solution parfaite : certaines machines peuvent bloquer WMI ou être protégées par un pare-feu, mais c’est un bon point de départ. De plus, vous pouvez enrichir le script avec d’autres informations ou l’exécuter via une tâche planifiée.

Conclure

Aucune de ces options n’est parfaite, mais leur combinaison offre un ensemble d’outils convenable pour identifier les utilisateurs connectés à des systèmes Windows distants. Que vous préfériez les outils intégrés comme qwinsta, PSLoggedOn ou les scripts avec WMI/CIM, vous pouvez adapter votre approche en fonction des autorisations, de l’environnement et du niveau d’information requis. Notez toutefois que l’activation du registre distant ou de la gestion RPC peut être nécessaire ; une configuration initiale est donc généralement requise.

Résumé

  • Utilisez PSLoggedOn pour vérifier les sessions locales et réseau ; assurez-vous que le service RemoteRegistry est activé.
  • Obtenez les informations de session via qwinsta, mais attention aux autorisations et aux paramètres du registre.
  • Utilisez les commandes WMI et CIM de PowerShell pour obtenir des informations sur les utilisateurs distants — activez WinRM.
  • Pour plusieurs machines, l’utilisation de scripts avec Test-NetConnection, Get-AdComputer et WMI permet d’automatiser les vérifications.

Réflexions finales

Ces méthodes devraient vous faire gagner du temps lorsque vous avez besoin d’informations rapides sur les connexions utilisateur. La gestion de plusieurs machines distantes est toujours un peu complexe, mais elles devraient vous permettre de garder une longueur d’avance.