Default value list for pipeline param in Powershell

Posted by fatcat1111 on Stack Overflow See other posts from Stack Overflow or by fatcat1111
Published on 2010-05-21T18:36:29Z Indexed on 2010/05/21 19:50 UTC
Read the original article Hit count: 360

Filed under:
|
|

I have a Powershell script that reads values off of the pipeline:

PARAM (
    [Parameter(ValueFromPipeline = $true)] 
    $s
)

PROCESS {
    echo "* $s"
}

Works just fine:

PS > my.ps1 foo
* foo

I would like the script to have list of default values, as the most common usage will always use the same values and storing them in the default will be most convenient. I did the usual assignment:

PARAM (
    [Parameter(ValueFromPipeline = $true)] 
    $s = 'bar'
)

PROCESS {
    echo "* $s"
}

Again, works just fine:

PS > my.ps1
* bar
PS > my.ps1 foo
* foo

However when setting the default to be a list, I get back something entirely reasonable but not at all what I want:

PARAM (
    [Parameter(ValueFromPipeline = $true)] 
    $s = @('bar', 'bat', 'boy')
)

PROCESS {
    echo "* $s"
}

Result:

PS > my.ps1
* bar bat boy

I expected:

PS > my.ps1
* bar
* bat
* boy

How can I get one call in to the Process loop for each default value? (This is somewhat different than getting one call in to Process, and wrapping the current body of in a big foreach loop over $s).

© Stack Overflow or respective owner

Related posts about powershell

Related posts about default