将未知数量的值传递给PowerShell脚本参数?

时间:2018-01-16 13:59:56

标签: powershell parameter-passing

我熟悉如何从命令行接受参数或参数并将它们传递给PowerShell:

powershell.exe -file myscript.ps1 -COMPUTER server1 -DATA abcd
[CmdletBinding()]
Param(
    [Parameter(Mandatory=$True)]
    [string]$computer,

    [Parameter(Mandatory=$True)]
    [string]$data
)

没关系,但如果$computer参数不止一个项目且项目数量未知,该怎么办?例如:

Powershell.exe -file myscript.ps1 -COMPUTER server1, server2, server3 -DATA abcd

此处我们不知道会有多少$computer个项目。总会有一个,但可能有2,3,4等等。这样的事情最好如何实现?

2 个答案:

答案 0 :(得分:3)

您可以使用[String]$Computer代替参数array接受多个字符串(或[String[]]$Computer)。

示例:

Function Get-Foo {
    [CmdletBinding()]
    Param (
       [Parameter(Mandatory=$True)]
       [String[]]$Computer,

       [Parameter(Mandatory=$True)]
       [String]$Data
    )

    "We found $(($Computer | Measure-Object).Count) computers"
}

Get-Foo -Computer a, b, c -Data yes

# We found 3 computers

Get-Foo -Computer a, b, c, d, e, f -Data yes

# We found 6 computers

答案 1 :(得分:2)

在参数定义中指定此项。从[String]更改为字符串数组[String[]]

[CmdletBinding()]
Param(
   [Parameter(Mandatory=$True)]
    [string[]]$computer,

   [Parameter(Mandatory=$True)]
    [string]$data
)