如何以域管理员身份从命令行注销Windows上的所有用户

时间:2016-04-19 09:59:29

标签: windows command-line continuous-integration

我在Windows上运行自动化测试(Windows 10和2012),自动化的一个要求是所有用户需要注销。部署后我有机会这样做。我有点看到this page给出答案,但在我尝试query session之后,我发现它甚至会提供servicesrdp-tcp个会话...但我不会想要停止任何服务...

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

您关联的网页有正确的答案。除了在Windows 2012/10中,您应该使用skip=2而不是1.这样您将跳过“服务”行。
所以你的批处理文件将如下所示:

query session >session.txt
for /f "skip=2 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt

答案 1 :(得分:0)

此解决方案基于之前的答案,但此解决方案将关闭所有会话(即使是断开连接的会话)。不幸的是,'query session'命令返回的每一行的文本格式很难解析。正如您在下一个屏幕截图中看到的,用户名可能为空,在此示例中,如果您使用tokens = 3,您将获得用户名而不是用户编译的ID。

enter image description here

问题是您无法使用其用户名注销已断开连接的用户。为了避免这个问题,我们使用2 for循环来获取会话名称和id(取决于行格式),然后我们只保留数值来发送logoff命令并注销断开连接的会话。

@echo off

for /f "skip=2 tokens=2,3 delims= " %%a in ('query session') DO (
    echo %%a|findstr /xr "[1-9][0-9]* 0" >nul && (
      logoff %%a 
    )

    echo %%b|findstr /xr "[1-9][0-9]* 0" >nul && (
      logoff %%b 
    )
)

答案 2 :(得分:0)

我们使用它来注销所有rdp会话(管理员除外)。可以根据需要进行调整。

@回显 ::注销活动用户 查询会话| findstr“ rdp,有效” | findstr / V“ dministrator”> sessionActive.txt / session中的/ f“ tokens = 3” %% i用于注销%% i del sessionActive.txt

::注销断开连接的用户 查询会话| findstr“光盘” | findstr / V“管理员,服务”> sessionDisc.txt 在(sessionDisc.txt)中用于/ f“ tokens = 2” %% i,请注销%% i del sessionDisc.txt

答案 3 :(得分:0)

注意:“ file.txt”包含每一行的计算机名称。

for /f "tokens=*" %%i in ("*\file.txt") do (
    psexec \\%%i -u domain\user -p password logoff console
)

在使用此代码之前,您必须通过以下链接下载PsTools:

https://download.sysinternals.com/files/PSTools.zip

https://docs.microsoft.com/vi-vn/sysinternals/downloads/psexec

然后解压缩PsTools存档=>复制所有文件=>粘贴到“ *:\ Windows \ System32” =>安装完成