如何将字符串数组传递给ps1文件?

时间:2017-08-23 05:46:50

标签: arrays powershell jenkins cakebuild

我正在使用Jenkins管道工作。我的要求是获取作业的所有提交消息,并将其从Jenkins管道文件传递到.ps1文件,然后从.ps1文件传递到cake文件。

我使用字符串列表来获取所有提交消息,然后将其转换为数组。

现在,我需要将此数组值从Jenkins管道文件传递给ps1文件。 我试图像Jenkins管道文件中的字符串一样传递。它引发了一个例外。任何人都可以告诉我这是否可以将数组值从Jenkins文件传递给.ps1文件?

Jenkins文件内容:

bat 'powershell.exe -ExecutionPolicy ByPass -File build.ps1 -Script build.cake -Target build -arrayContent '+"${arrayContent}"

PS1文件内容:

Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" arrayContent=`"$arrayContent`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs"

我在.ps1文件中将数组声明为[string[]]$arrayContent = @()

蛋糕文件内容:

var arrayContent = Argument<string[]>("arrayContent");

1 个答案:

答案 0 :(得分:3)

PowerShell数组在PowerShell外部不起作用。您可以将值作为单个分隔符分隔的字符串传递,并将该字符串拆分为PowerShell脚本:

Param(
    [Parameter(Mandatory=$true)]
    [string]$ArrayContent,
    ...
)

$stringArray = $ArrayContent -split ','
...
powershell.exe ... -ArrayContent "foo,bar,baz"

或者将每个字符串作为单独的未命名参数传递,以便将它们收集在自动变量$args中:

[CmdletBinding()]
Param(
    ...
)

$stringArray = $args
...
powershell.exe ... "foo" "bar" "baz"