%sessionname% 返回错误的会话名称

%sessionname% 返回错误的会话名称

我有一台虚拟化的 Windows XP SP3 计算机,我通过远程桌面连接到它。我的一个脚本需要使用 %sessionname% 变量。然而这会返回不正确的信息。

C:\>%sessionname%

不断返回 RDP-Tcp#5,而不是当前连接会话的值(RDP-Tcp#35 或类似值),如任务管理器中所示

这导致我的脚本包含不正确的信息。我该如何解决此问题?

编辑更多信息:重新启动似乎可以解决第一次连接的问题,但随后的连接数字再次不同步。

答案1

我在将 Windows Server 2008 R2 作为远程桌面运行时遇到了完全相同的问题。会话 ID 似乎始终正确,但您无法从 %sessionid% 或 VBA Environ("SessionID") 获取会话 ID。我的解决方法是使用 Environ("UserName") 和 C:>query session 来提取 SessionID,然后将其与 C:>query process "processname" 一起使用以确定进程是否正在会话中运行。我不确定您的脚本在做什么,但也许这种方法会有所帮助。请注意,这仅在用户一次只允许一个会话时才有效,就像我们的终端服务器设置中的情况一样。如果用户可以拥有多个会话,则 sessionid 将不会基于用户名而唯一。

答案2

我不确定为什么它不能正确更新,但也许你可以使用查询会话而是?它也更详细一些。

答案3

感谢 Paul 的帖子。我在 Win2008R2 上遇到了同样的问题,我将脚本更改为:

for /F "usebackq tokens=1" %%f in (`query session ^| findstr /C:^^^>`) do set session="%%f"
set session=%session:~10,-1%
tasklist /FI "SESSIONNAME eq RDP-Tcp#%session%" | findstr mytool.exe >NUL
if %errorlevel% EQU 0 echo Tool found!

我查找当前会话(因此如果同一用户打开多个会话,它就会工作)。然后我查看我的工具是否在当前会话中运行。
请注意 %%f 周围的“ ”,这样我就不会被行首的“>”所困扰。

相关内容