我正在Windows上运行自动化testing(Windows 10和2012),自动化的一个要求是所有用户都需要注销。 部署后我有机会做到这一点。 我有点看到这个页面给出了答案,但是我尝试query session
,我看到它甚至services
和rdp-tcp
会话…但我不想停止任何服务…
任何build议?
您链接的页面有正确的答案。 除了在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
这个解决方案是基于以前的答案,但是这个会关闭所有会话(甚至断开会话)。 不幸的是,'查询会话'命令返回的每一行的文本格式可能难以解析。 正如你在下一个屏幕截图中看到的,用户名可能是空的,在这个例子中,如果你使用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 ) )