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

Dom*_*tti 1 powershell parameter-passing

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

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

    [Parameter(Mandatory=$True)]
    [string]$data
)
Run Code Online (Sandbox Code Playgroud)

这很好,但是如果$computer参数不止一个项目并且项目数量未知怎么办?例如:

Powershell.exe -file myscript.ps1 -COMPUTER server1, server2, server3 -DATA abcd
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*te1 5

您可以通过使用来使参数[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
Run Code Online (Sandbox Code Playgroud)