如何在不锁屏的情况下登出远程 Windows PC

我们远程登录 Windows PC 时,该主机的屏幕会被自动锁定,直到有人从本地登入这台电脑, 屏幕才会被解锁,这当然是基于安全的考量,但是有时候这也会造成不便, 比如 steam 的 In-Home Streaming功能,如果处于锁屏状态,那么我们只能看到安全桌面, 而不是游戏串流画面,那么有没有办法可以在退出远程登录时不锁定屏幕呢

可行方案

通常我们可以使用一些第三方的远程桌面软件,比如 TeamViewer 或 QQ 内嵌的远程登录的功能, 但是其实不需要第三方软件我们就可以达到类似的效果,我们只需要一个批处理文件

创建一个登出的批处理文件

我们可以在任意位置创建一个包含以下内容,名为 disconnect.cmd 的批处理文件

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console"

这条命令是使用 powershell 查询当前用户的 sessionid,然后使用 tscon 断开当前连接, 这种方式断开连接后,系统不会自动锁定屏幕,而会把控制权交回本地。 不过这条指令需要管理员权限,所以我们需要右击,然后选择 使用管理员运行 ,不过根据上次我们提到的 自动获取管理员权限的批处理文件 我们可以修改一下这个批处理文件,就可以自动提升权限了。

@ECHO OFF
NET SESSION 1>NUL 2>NUL
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO ADMINTASKS

:ELEVATE
CD /d %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
EXIT

:ADMINTASKS
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console"

这样登出时,我们直接双击批处理文件,会自动提示我们赋予管理员权限执行, 不会出现执行无效的情况