【问题标题】:Can I Pass Arguments To A Powershell Function The Unix Way?我可以以 Unix 方式将参数传递给 Powershell 函数吗?
【发布时间】:2014-02-15 21:22:52
【问题描述】:

我有一个基本上如下所示的 PowerShell 函数:

function DoSomething-ToTask {
    [cmdletbinding()]
    param(
          [parameter(Mandatory=$true)]
          [strehg[]]$TaskNums
    )

    foreach ($TaskNum in $TaskNums) {
        do something $TaskNum
    }
}

目标是能够使用任意数量的参数从命令行调用此函数。例如,我现在可以这样称呼它:

DoSomething-ToTask 1 2 3

..以后会这样

DoSomething-ToTask 4

第二个例子有效,但第一个无效。从那以后,我了解到我需要像这样传递多个参数:

DoSomething-ToTask (1, 2, 3)

这不是世界上最糟糕的事情,但与第一个例子相比仍然有点痛苦。

有没有办法编写一个适用于“1 2 3”参数示例的 PS 函数?

【问题讨论】:

  • 顺便说一句:你不需要 (...) 周围的 1, 2, 3 - 事实上,如果数组元素是 strings,这样做会使语法更加麻烦- 见this answer

标签: powershell scripting


【解决方案1】:

是的,您可以使用ValueFromRemainingArguments 参数属性。

function DoSomething-ToTask {
    [cmdletbinding()]
    param(
          [Parameter(Mandatory=$true, ValueFromRemainingArguments = $true)]
          [int[]]$TaskNums
    )

    foreach ($TaskNum in $TaskNums) {
        do something $TaskNum
    }
}

这是一个工作示例:

function Do-Something { 
    [CmdletBinding()]
    param (
        [Parameter(ValueFromRemainingArguments = $true)]
        [int[]] $TaskNumber
    )

    foreach ($Item in $TaskNumber) {
        Write-Verbose -Message ('Processing item: {0}' -f $Item);
    }
}

Do-Something 1 2 3 -Verbose;

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 2011-01-10
    • 2015-04-28
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多