在 Active Directory 中,如果您想阻止用户登录,您可以禁用他们的帐户或简单地重置他们的密码。但是,如果您有一个已经登录到工作站的用户,并且您需要尽快阻止他们访问任何资源 - 您该怎么做?我说的是一种紧急情况,在这种情况下,一名员工被立即解雇,如果不立即将他们锁定在网络之外,他们就有造成严重破坏的风险。
几天前,我遇到了类似的情况。起初我不知道该怎么做。阻止用户访问网络共享很容易,但这还不够。最后,我使用 PowerShell cmdlet 关闭了目标计算机Stop-Computer -ComputerName <name> -Force
,就我而言,这解决了问题。但是,在某些情况下,这可能不是最好的选择,例如,如果您需要切断的用户登录在多个工作站上或提供重要服务的计算机上,而您无法将其关闭。
远程强制用户立即从所有工作站注销的最佳解决方案是什么?这在 Active Directory 中是否可行?
答案1
最佳解决办法:一名保安护送该人离开……
次优解决方案:
- 首先,使用 qwinsta 检查会话号:QWINSTA /server:computername
- 记下会话 ID。
- 然后使用注销命令:LOGOFF sessionID /server:computername。
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.
我为此编写了一个基本的批处理脚本。我需要unixtools
路径中的一些以及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
答案2
并非完全基于 AD,但应该可以满足您的要求。
禁用或过期帐户
import-module activedirectory
set-aduser -identity "username" -accountexperationdate "12:09 pm"
或者
set-aduser -identity "username" -enabled $false
然后将用户从其机器上注销
shutdown -m "\\computername" -l
注销用户的另一种方法是使用内置的 Windows 实用程序,从管理命令提示符开始
logoff 1 /SEVER:computername
这将从远程计算机注销会话 ID 1。如果您不知道会话 ID(默认为 1),那么您可以使用 quser 对远程计算机进行查找。
答案3
您可以使用 wmic 远程锁定用户会话:
1 - 首先,更改用户密码:
C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
create "net user [user] [NewPassword]"
2 – 然后,禁用该帐户:
C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
create "net user [user] /active:no"
3 – 然后,断开用户会话:
C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
create "tsdiscon"
这有一个附加值,因为您不会丢失当前的用户会话,因此当您解锁工作站时,您将能够看到他在被护送到门口之前是否试图做一些恶意的事情。
所有功劳归于命令行功夫博客。里面有一堆疯狂的安全/取证相关的东西!
更新:前两个步骤适用于本地用户,在活动目录环境中实际上更容易,禁用帐户并在 AD 中更改密码,然后针对恶意用户 IP 地址运行第 3 个命令。
答案4
只需在用户属性中将登录时间更改为所有时间均拒绝登录即可。这将立即将他们从登录的位置注销。