我在Windows上运行自动化测试(Windows 10和2012),自动化的一个要求是所有用户需要注销。部署后我有机会这样做。我有点看到this page给出答案,但在我尝试query session
之后,我发现它甚至会提供services
和rdp-tcp
个会话...但我不会想要停止任何服务...
有什么建议吗?
答案 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。
问题是您无法使用其用户名注销已断开连接的用户。为了避免这个问题,我们使用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” =>安装完成