Jenkins:运行 Windows 32 位模式下的批处理命令

Jenkins: Run Windows batch commands in 32-bit mode

使用 Jenkins,我们设置了自动化测试 - 在远程机器上安装应用程序和 运行 测试用例。此过程使用批处理文件完成。因为它是一个 windows 应用程序,所以我必须注销(远程计算机)系统以保持会话处于活动状态。为此,我使用了以下脚本:

for /F "skip=1 tokens=3" %%s in ('query user testuser') do 
(C:\Windows\system32\tscon.exe %%s /dest:console )

在远程机器上,当我手动 运行 这个脚本时,它工作得很好。但是当相同的脚本(批处理文件)来自 Jenkins 运行 时,我收到以下错误:

'query' is not recognized as an internal or external command, operable program or batch file.

这是因为您 运行 query 来自 32 位进程。在 64 位 Windows 上,32 位进程将放在 File System Redirector

In most cases, whenever a 32-bit application attempts to access %windir%\System32, the access is redirected to %windir%\SysWOW64. Access to %windir%\lastgood\system32 is redirected to %windir%\lastgood\SysWOW64. Access to %windir%\regedit.exe is redirected to %windir%\SysWOW64\regedit.exe

On 64-bit Windows System32 用于 64 位系统工具,SysWOW64 用于 32 位系统工具。 query 仅为 64 位,因此它在 SysWOW64 中不可用,并且不能被 32 位进程看到

C:\>where query
C:\Windows\System32\query.exe

您可以使用 SysWOW64 中的 32 位 cmd 进行检查:

>C:\Windows\SysWOW64\cmd.exe /c query user testuser
'query' is not recognized as an internal or external command,
operable program or batch file.

>C:\Windows\SysWOW64\cmd.exe /c where query
INFO: Could not find files for the given pattern(s).

您需要将 query user testuser 更改为 %windir%\sysnative\query.exe user testuser。或者更好 change to 64-bit Jenkins