如何在Jenkins流水线中将Groovy Map传递给PowerShell脚本
可行方案(非序列化反序列化)
方案1:构建PowerShell哈希表原生语法字符串
直接在Groovy中遍历Map,生成符合PowerShell哈希表语法的键值对内容,再插入到PowerShell脚本中。核心是处理字符串值的单引号转义(PowerShell中单引号转义为两个单引号),避免语法错误。
示例代码:
def procedureParameters = [key: 'value', name: 'test', count: 123] // 遍历Map生成PowerShell键值对行 def psHashEntries = procedureParameters.collect { k, v -> def valStr = v instanceof String ? "'${v.replace("'", "''")}'" : v.toString() "'${k}' = ${valStr}" }.join(",\n ") def exitCode = powershell """ \$parameters = @{ ${psHashEntries} } # 验证输出 Write-Host \$parameters['key'] Write-Host \$parameters['count'] """
方案2:通过Jenkins环境变量传递(适合结构固定的Map)
将Groovy Map的每个键值对转为Jenkins环境变量,再在PowerShell中读取这些变量构建哈希表。
示例代码:
def procedureParameters = [key: 'value', name: 'test'] // 将Map键值对注入Jenkins环境变量 procedureParameters.each { k, v -> env["PARAM_${k.toUpperCase()}"] = v.toString() } def exitCode = powershell """ \$parameters = @{ 'key' = \$env:PARAM_KEY 'name' = \$env:PARAM_NAME } Write-Host \$parameters['name'] """
方案3:转为PowerShell命名参数(适合调用脚本/函数场景)
如果你的PowerShell代码是调用自定义函数或外部脚本,可以将Groovy Map转为PowerShell的命名参数格式传递。
示例代码:
def procedureParameters = [key: 'value', name: 'test'] // 生成PowerShell命名参数字符串 def psArgs = procedureParameters.collect { k, v -> def valStr = v instanceof String ? "'${v.replace("'", "''")}'" : v.toString() "-${k} ${valStr}" }.join(" ") def exitCode = powershell """ function Process-Params { param( [string]\$Key, [string]\$Name ) Write-Host "Key: \$Key, Name: \$Name" } Process-Params ${psArgs} """
内容的提问来源于stack exchange,提问作者Palin Revno
相关产品推荐
相关产品推荐

