Je recherche un outil pour savoir si un ordinateur donné sur le réseau local est accessible à distance par un utilisateur ou non et, idéalement, j'aimerais savoir qui est cet utilisateur. Dans mon entreprise, nous partageons des machines virtuelles et nous devons toujours demander aux membres de l'équipe s'ils utilisent un ordinateur distant. J'aimerais avoir une sorte de tableau de bord qui peut me dire quel ordinateur est utilisé et quel ordinateur est gratuit.
Je suis heureux d'utiliser n'importe quel type de solution commerciale qui nécessiterait l'installation de services sur chacune des machines à surveiller ou des choses de ce genre.
Ce qui suit est simplifié si vous interrogez à partir d'un client Windows joint au même domaine que le système que vous interrogez, et peut nécessiter certains droits au-delà d'un utilisateur de domaine standard. Si vous rencontrez des problèmes d'authentification/autorisation, ce serait la première chose que je vérifierais.
Il existe un outil disponible au moins aussi loin que Windows XP appelé "qwinsta". Les versions ultérieures de Windows ont à la fois qwinsta et "session de requête".
qwinsta /server:computer01
SESSIONNAME USERNAME ID STATE TYPE DEVICE
console 0 Conn wdcon
rdp-tcp 65536 Listen rdpwd
administrator 2 Disc rdpwd
Cela montre l'utilisateur "administrateur" connecté mais déconnecté. Étant donné que dans cet exemple, computer01 est un système Windows Server 2003 avec la licence RDP "d'administration" par défaut, il y a une deuxième session à l'écoute de quelqu'un pour se connecter.
L'exécution à nouveau de la même commande après la connexion à cette session précédemment déconnectée ressemble à ceci:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
[unchanged output removed]
rdp-tcp#25 administrator 2 Active rdpwd
Cela suffit pour répondre "est quelqu'un actuellement actif via RDP", et si vous utilisez des noms d'utilisateur individuels, il devrait également répondre au "qui". Si vous utilisez tous "testuser" ou "administrateur" ou quelque chose, vous voudrez probablement connaître la réponse à "de quel client", et cela n'est pas donné ci-dessus.
Ce qui précède donne une réponse de base rapide sans avoir besoin d'outils supplémentaires. Pour des informations plus détaillées, vous pouvez consulter la bibliothèque cassia ou PSTerminalServices (construit sur cassia). Voir certaines des réponses dans cette question pour plus de détails.
Ma première pensée à ce sujet a été d'utiliser des outils Sysinternals tels que PsLoggedOn ou LogonSessions . J'ai ensuite trouvé une référence aux outils qwinsta et rwinsta jusque-là inconnus de moi dans ce billet de blog de 20 .
Vous pouvez utiliser un PSModule nommé PSRdSessions , ce module fournir quelques fonctions simples
échantillon d'utilisation
Get-RdSession -ComputerName Server01.domain.xyz # return [Cassia.Impl.TerminalServicesSession]
pour le retour [table de hachage]
Get-RdSession -ComputerName Server01.domain.xyz | Convert-RdSession # return
pour le retour [pscustomobject]
Get-RdSession -ComputerName Server01.domain.xyz | Convert-RdSession | %{[pscustomobject]$_}