我有一台虚拟化的Windows XP SP3机器,我通过远程桌面连接到这台机器。 我的一个脚本需要使用%sessionname%variables。 但是这会返回不正确的信息
C:\>%sessionname%
不断返回RDP-Tcp#5,而不是当前连接的会话(RDP-Tcp#35或类似的)的值,如任务pipe理器
这会导致我的脚本包含不正确的信息。 我能做些什么来解决这个问题?
编辑更多信息:重新启动似乎解决了第一个连接的问题,但随后的连接再次失去同步的数字。
Windows Server 2008 R2作为远程桌面运行时遇到了完全相同的问题。 会话ID似乎总是正确的,但无法从%sessionid%或从VBA Environ(“SessionID”)获取会话ID。 我的解决方法是在C:>查询会话中使用Environ(“UserName”)来提取SessionID,然后使用C:>查询进程“processname”来确定进程是否在会话中运行。 我不确定你的脚本正在做什么,但也许这种方法将有所帮助。 请注意,这只有在用户一次只允许一个会话的情况下才有效,就像在我们的terminal服务器设置中一样。 如果用户可以拥有多个会话,那么sessionid将不会基于用户名而是唯一的。
我不知道为什么它没有正确更新,但也许你可以使用查询会话的输出呢? 它也更详细一点。
感谢保罗为你的post。 我在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周围的“”,这样我就不会被行开头的“>”所困扰。