You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Powershell步骤中PsExec query session无返回结果的排查求助

问题分析与解决方案

核心原因

Jenkins服务的运行上下文、权限配置与本地PowerShell环境存在差异,导致PsExec执行query session时权限不足或环境不兼容。

具体解决办法

1. 调整Jenkins服务的运行账号

Jenkins默认以Local System账户运行,该账户在远程机器上的权限受限,无法正常查询会话信息。

  • 操作步骤:
    • 打开Windows服务管理器,找到Jenkins服务
    • 右键选择「属性」→「登录」选项卡
    • 切换为远程机器的本地管理员账号或域管理员账号(需确保该账号在远程机器上具备管理员权限)
    • 重启Jenkins服务

2. 修改PsExec命令参数

原命令中的-i参数用于绑定交互式会话,但query session是控制台命令,不需要交互式会话,反而可能导致执行失败:

  • 将命令修改为:
    $sessionInfo = & psexec \\$remoteMachine -s query session 2>&1
    
    加上2>&1可以捕获错误输出,便于排查更详细的问题。

3. 关闭远程机器的UAC远程限制

远程机器的UAC设置可能阻止管理员权限的远程执行:

  • 在远程机器上打开「本地组策略编辑器」(gpedit.msc)
  • 导航到:计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 安全选项
  • 找到「用户账户控制:远程UAC限制」,设置为已禁用
  • 重启远程机器生效(注意:该操作会降低系统安全性,需评估后执行)

4. 验证变量与网络连通性

  • 在Jenkins的PowerShell步骤开头添加Write-Output "Remote Machine: $remoteMachine",确认变量正确赋值
  • 检查Jenkins服务器与远程机器之间的445端口(SMB)是否开放,确保PsExec可以正常建立连接

5. 替换query session命令(备选方案)

如果query session仍无法执行,可以改用PowerShell原生命令查询远程会话:

$sessionId = Invoke-Command -ComputerName $remoteMachine -ScriptBlock {
    quser | Where-Object { $_ -match 'Active' } | ForEach-Object {
        ($_ -split '\s{2,}')[2]
    }
}

然后用该$sessionId执行后续PsExec命令:

psexec \\$remoteMachine -s -i $sessionId powershell.exe -ExecutionPolicy Bypass -Command "& {C:\bat-automatic\PS_trail.ps1 -SessID '$sessionId'}"

内容的提问来源于stack exchange,提问作者Dhuruvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:05:08