【问题标题】:Passing Build Process Parameters into a Powershell Script将构建过程参数传递到 Powershell 脚本
【发布时间】:2014-08-25 20:38:25
【问题描述】:

所以我定义了一个流程模板,它在我的构建定义中接受一个名为BuildDefinitionList 的字符串数组。然后我调用一个powershell脚本。我想做的是检索String 类型的数组。如何从我的 powershell 脚本中实现这一点?

更新

我已将流程模板修改为具有带有脚本路径参数和脚本参数参数的 InvokeProcess 活动。为了自定义我的定义,我使用以下内容作为指导 here

我有一个名为 Script 的进程参数,其中包含 powershell 脚本的路径 我有另一个名为ScriptArguments 的过程参数,它具有以下内容。

builds `"Test 1`", `"Test 2`", `"Test 3`", `"Test 4`"

我的脚本接受或正在寻找一个字符串数组

[cmdletbinding()]
Param(
    [Parameter(Mandatory=$false,
                       ValueFromPipeline=$true,          
             ValueFromPipelineByPropertyName=$true)]
    $builds
)

当我运行构建时,我收到以下错误

A positional parameter cannot be found that accepts
 argument 'Test 1'.

【问题讨论】:

    标签: powershell tfs


    【解决方案1】:

    您创建一个参数,并为其指定[String[]] 的类型。

    Param(
    [String[]]$SomeStrings
    )
    ForEach($String in $SomeStrings){
        Do stuff!
    }
    

    然后在调用时将数组传递给脚本。

    【讨论】:

    • 我不想这样做,因为我需要为多个构建定义创建一个标准。每个构建定义都将调用相同的脚本并传递一个字符串数组。这就是为什么我创建了一个名为“BuildDefinitionList”的构建过程参数
    • 我没有关注。我使用自定义团队构建工作流程中的 PowerShell。我使用 InvokeProcess 活动启动 PowerShell.exe “进程外”。 PowerShell 会话对团队构建对象模型没有任何可见性,因此您需要将字符串数组作为参数传递给脚本。顺便说一句,如果每个构建定义“将调用同一个脚本并传递一个字符串数组”并且脚本接受一个字符串数组作为参数,我没有看到问题是什么?
    • 我的问题是我有一个字符串 [] 类型的构建过程参数。这是人们可以选择要传递的数字或参数的地方。我运行脚本的构建过程参数只接受一个字符串,它运行我提供的脚本。如果我为此添加参数...我会收到找不到文件错误
    • 因此,与其标记我的答案,也许您应该发布您的实际问题:如何从 TFS 构建过程参数调用脚本时将参数传递给脚本?
    • 我必须完全改变这个问题。我最初的问题是将构建过程参数传递给脚本。我知道如何处理 powershell 脚本中的参数。这与问题无关。但是如果我的构建工作流程中有一个 InvokeProcess 过程,那么我将如何调用我的脚本并传递一个字符串数组?
    猜你喜欢
    • 2016-07-08
    • 2015-12-18
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多