怀德维宁

大邦维屏,大宗维翰。怀德维宁,宗子维城。

0%

Windows系统tscon工具概述

最近看到了一个使用tscon工具解决windows远程链接断开后部分应用随之中断的案例,因此对tscon产生了一些好奇,这里就总结一下tscon工具的功能及使用方法。
在微软的官方文档上(tscon)可以看到该工具的一些描述,因此结合该文档对tscon工具进行描述。

定义

该工具用来连接到远程桌面会话主机服务器上的另一个会话。
备注:必须拥有“完全控制”访问权限或“连接”特殊访问权限才能连接到另一个会话(即使用该工具的账号需具有较高的权限)

适用范围

Windows server服务器,即Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012。

语法

tscon {<sessionID> | <sessionname>} [/dest:<sessionname>] [/password:<pw> | /password:*] [/v]

参数详解如下:

  • :指定要连接到的会话的 ID。 如果你使用可选的 /dest: 参数,则还可以指定当前会话的名称。
  • :指定要连接到的会话的名称
  • /dest::指定当前会话的名称。 连接到新会话时,此会话将断开连接。 还可以使用此参数将其他用户的会话连接到一个不同的会话。
  • /password::指定拥有你要连接到的会话的用户的密码。 当进行连接的用户不拥有会话时,需要提供此密码。
  • /password:*:提示输入拥有你要连接到的会话的用户的密码。
  • /v:显示有关正在执行的操作的信息。
  • /?:在命令提示符下显示帮助。

备注:
(1)如果未在 /password 参数中指定密码,并且目标会话属于当前用户以外的用户,则此命令将失败。
(2)你无法连接到控制台会话。

示例

(1)若要连接到当前远程桌面服务会话主机服务器上的会话 12,并断开当前会话的连接,请键入:

tscon 12

(2)若要使用密码 mypass 连接到当前远程桌面服务会话主机服务器上的会话 23,并断开当前会话的连接,请键入:

tscon 23 /password:mypass

(3)若要将名为 TERM03 的会话连接到名为 TERM05 的会话,然后断开会话 TERM05 的连接,请键入:

tscon TERM03 /v /dest:TERM05

复杂脚本分析

当使用远程桌面连接到远程计算机时,关闭远程桌面将会锁定计算机并显示登录界面,在锁定模式下,计算机不会有GUI图形界面,因此所有正在运行和即将调度的GUI任务都会失败。
为避免GUI任务失败,可以使用tscon组件实现从远程桌面断开连接,tscon会把控制权返还给远程计算机上的原始本地会话,这样就绕过了登录界面。远程计算机上的全部程序(包含GUI图形任务在内)都会继续正常运行。

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (%windir%\System32\tscon.exe %%s /dest:console)

该脚本的运行逻辑如下:
1.查询以用户名%USERNAME%登录的全部会话;
2.使用”skip=1 tokens=3”语法过滤掉查询结果的首行(标题行),并选取第3列(session ID)作为输出值;
3.遍历筛选过的全部会话id,使用tscon将会话的控制钱返还给计算机上的原始本地会话(console),依此实现断开连接,但是绕过登录界面,保持会话内的全部任务可以后续继续执行;

参考链接

1.https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/tscon;
2.https://support.smartbear.com/testcomplete/docs/testing-with/running/via-rdp/keeping-computer-unlocked.html;
3.https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/for;
4.https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/query-user;