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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:42:06