Dans Active Directory, si vous souhaitez empêcher un utilisateur de se connecter, vous pouvez soit désactiver son compte, soit simplement réinitialiser son mot de passe. Cependant, si vous avez un utilisateur déjà connecté à un poste de travail et que vous devez l’empêcher d’accéder à toute ressource le plus rapidement possible — comment faites-vous ? Je parle d’une situation d’urgence dans laquelle un employé est licencié avec effet immédiat et il y a un risque qu’il cause des dégâts s’il n’est pas verrouillé hors du réseau immédiatement.
Il y a quelques jours, j’ai été confronté à un cas similaire. Au début, je ne savais pas comment agir. Empêcher l’accès de l’utilisateur aux partages réseau est facile, mais ce n’est pas suffisant. Finalement, j’ai éteint l’ordinateur cible avec la cmdlet PowerShell Stop-Computer -ComputerName <nom> -Force et dans mon cas, cela a résolu le problème. Cependant, dans certains cas, ce n’est peut-être pas le meilleur choix, par exemple si l’utilisateur que vous devez couper est connecté sur plusieurs postes de travail ou sur un ordinateur qui fournit un service important et que vous ne pouvez tout simplement pas éteindre.
Quelle est la meilleure solution possible pour forcer à distance une déconnexion immédiate de l’utilisateur de tous les postes de travail ? Est-ce seulement possible dans Active Directory ?
Meilleure solution : un agent de sécurité escorte la personne dehors…
Deuxième meilleure solution :
D’abord, vérifiez le numéro de session avec qwinsta : QWINSTA /server:nom_ordinateur
Notez l’identifiant de session.
Ensuite, utilisez la commande logoff : LOGOFF sessionID /server:nom_ordinateur.
C:\>qwinsta /?
Display information about Remote Desktop Sessions.
QUERY SESSION [sessionname | username | sessionid]
[/SERVER:servername] [/MODE] [/FLOW] [/CONNECT] [/COUNTER] [/VM]
sessionname Identifies the session named sessionname.
username Identifies the session with user username.
sessionid Identifies the session with ID sessionid.
/SERVER:servername The server to be queried (default is current).
/MODE Display current line settings.
/FLOW Display current flow control settings.
/CONNECT Display current connect settings.
/COUNTER Display current Remote Desktop Services counters information.
/VM Display information about sessions within virtual machines.
C:\>logoff /?
Terminates a session.
LOGOFF [sessionname | sessionid] [/SERVER:servername] [/V] [/VM]
sessionname The name of the session.
sessionid The ID of the session.
/SERVER:servername Specifies the Remote Desktop server containing the user
session to log off (default is current).
/V Displays information about the actions performed.
/VM Logs off a session on server or within virtual machine. The unique ID of the session needs to be specified.
J’ai écrit un script batch rudimentaire pour cela. Il nécessite des unixtools dans le PATH ainsi que psexec.
@ECHO OFF
:: Script to log a user off a remote machine
::
:: Param 1: The machine
:: Param 2: The username
psexec \\%1 qwinsta | grep %2 | sed 's/console//' | awk '{print $2}' > %tmp%\sessionid.txt
set /p sessionid=< %tmp%\sessionid.txt
del /q %tmp%\sessionid.txt
psexec \\%1 logoff %sessionid% /v