最终目标:要配置 jenkins 作业以在 Windows 活动会话中的 Windows 桌面应用程序上运行自动化脚本,我使用 Jenkins + Psexec 命令来实现此目标。
我使用的代码如下:
$sessionInfo = & psexec \\$remoteMachine -s -i query session
Write-Output "session info: "+ $sessionInfo
$sessionInfo | Where-Object { $_ -match "^\s*rdp" } | ForEach-Object {
$fields = $_ -split '\s{2,}'
if ($fields.Length -ge 4 -and $fields[3] -eq 'Active') {
$fields[2]
$sessionId = $fields[2] # Output the session ID
Write-Output "inner loop-Session id for current open session : "+ $sessionId
}
}
psexec \\$remoteMachine -s -i $sessionId powershell.exe -ExecutionPolicy Bypass -Command "& {C:\bat-automatic\PS_trail.ps1 -SessID '$sessionId'}"
当我从主机 powershell 应用程序运行上面的脚本时,通过触发远程计算机中的自动化脚本,上述脚本工作得完全正常,但是当我在 powershell 构建步骤中对 Jenkins 作业尝试相同的操作时,以下命令
& psexec \\$remoteMachine -s -i query session
jenkins 的控制台输出如下所示:
Connecting to <remoteMahcine1>...
Starting PSEXESVC service on <remoteMahcine1>...
Copying authentication key to <remoteMahcine1>...
Connecting with PsExec service on <remoteMahcine1>...
Starting query on <remoteMahcine1>...
SESSIONNAME USERNAME ID STATE TYPE DEVICE
query exited on <remoteMahcine1> with error code 1.
因此无法在活动的 Windows 会话中触发自动化脚本。为了实现这一目标,有人能指出我在哪里犯了错误吗?
如果我不得不猜测您的 Jenkins 用户没有足够的权限。根据文档:
用户随时可以查询当前登录的会话。要查询其他会话,用户必须具有特殊访问权限。
您可以尝试两件事: