无法从Jenkins将带空格的参数正确传递给PowerShell脚本

bvpmtnay  于 2022-11-25  发布在  Shell
关注(0)|答案(1)|浏览(196)

我在Jenkins管道中有一个阶段,我在其中调用了一个PowerShell脚本,我在一个容器中这样调用它:

stage('Processing') {
            container('remote') {
                sh "pwsh -file script.ps1 ${params.NAME} ${params.DESCRIPTION} ${params.PEOPLE} 
            }
    }

在脚本中,我为远程会话做了一些准备,并使用以下命令调用它

Invoke-Command -Session $RemoteSession -ArgumentList $parameters -ScriptBlock $ScriptBlock

前面提到的准备工作基本上就是我向args添加另一个参数,我这样做

$parameters = @()
    $parameters = $parameters + $args
    $parameters += $var

在scriptblock中,我通过它们的索引来引用参数,比如$args[1]。这些主要是字符串,当从Jenkins传递的参数中没有空格时,一切都可以正常工作。但是当我们假设${params.NAME}中有空格时,索引不能正常工作,因为空格将原始字符串分隔成多个参数,因此如果原始索引是$args[1],它不接受${params.DESCRIPTION}的值,而是接受${params.NAME}的一部分。
你知道如何避免这个问题,并采取在参数与原来的索引,即使它有空格在它?

pqwbnv8z

pqwbnv8z1#

  • 要使PowerShell将扩展值(如${params.NAME})视为单个参数,请将它们括在"中,在"..." Groovy字符串的上下文中,必须将其转义为\"

因此:

sh "pwsh -File script.ps1 \"${params.NAME}\" \"${params.DESCRIPTION}\" \"${params.PEOPLE}\""

相关问题