arrays - 如何将字符串数组传递到 ps1 文件?

标签 arrays powershell jenkins cakebuild

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

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

现在,我需要将此数组值从 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");

最佳答案

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"

关于arrays - 如何将字符串数组传递到 ps1 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831522/

相关文章:

python - 如何增加 numpy int32 数组的维度?

Python, SOAP 水,管理数组答案

excel - Ping 脚本不导出结果

powershell - 来自自定义模块的命令行开关未被识别

javascript - 从末尾删除元素并添加到开头

php - 在数组中寻找字符串

c# - 在 Powershell Cmdlet 中处理同步的最佳方式

validation - maven pom 验证因依赖而失败

maven - 在 Jenkins 管道 Groovy 脚本中访问 Maven 元数据插件参数?

ruby - 即使明确给出路径,jenkins 也无法找到 rake 安装