从 jenkins Powershell 构建步骤运行时,psexec 查询会话不会返回任何结果

问题描述 投票:0回答:1

最终目标:要配置 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 会话中触发自动化脚本。为了实现这一目标,有人能指出我在哪里犯了错误吗?

powershell jenkins psexec
1个回答
0
投票

如果我不得不猜测您的 Jenkins 用户没有足够的权限。根据文档

用户随时可以查询当前登录的会话。要查询其他会话,用户必须具有特殊访问权限。

您可以尝试两件事:

  1. 如果查询 Jenkins 用户的会话有效,那么很可能是权限问题
  2. 在建立连接时检查安全日志是否有错误。它可能有您正在寻找的信息
© www.soinside.com 2019 - 2024. All rights reserved.