在Jenkins中通过Invoke-Command传递变量执行Stop-Process失败
解决Jenkins中PowerShell远程停止进程的参数传递问题
问题原因
你的代码核心错误有两点:
- Invoke-Command的ScriptBlock中,param参数错误使用了
$env:process这种环境变量格式的命名,不符合参数定义规范 - 远程PowerShell会话无法直接访问本地Jenkins的环境变量(
$env:*),必须通过-ArgumentList显式传递参数值
修正后的代码
# 可选:将环境变量赋值给常规变量,提升代码可读性 $targetHost = $env:hostname $targetProcess = $env:process # 创建远程会话 $session = New-PSSession $targetHost # 执行远程命令,正确传递参数 Invoke-Command -Session $session -ScriptBlock { param($processName) Stop-Process -ProcessName $processName -Force } -ArgumentList $targetProcess # 关闭远程会话 $session | Remove-PSSession
关键注意事项
- 参数命名规范:ScriptBlock内的param必须使用常规变量名(如
$processName),不能用$env:xxx格式 - 参数传递逻辑:远程会话无法读取本地Jenkins的环境变量,必须通过
-ArgumentList把本地变量的值传递给远程ScriptBlock的参数 - 变量大小写一致性:PowerShell对变量名大小写不敏感,但建议保持命名一致(避免混用
$session和$Session)
内容的提问来源于stack exchange,提问作者DrixlRey
相关产品推荐
相关产品推荐

