5

I'm writing a script with PowerShell and at some point I needed to use ValidateSet on function params. It's a very good feature, but what I need is something more than that.

For example

Function JustAnExample
{
    param(
        [Parameter(Mandatory=$false)][ValidateSet("IPAddress","Timezone","Cluster")]
        [String]$Fields
    )

    write-host $Fields
}

So this code snippet allows me to choose one item from the list like that
JustAnExample -Fields IPAddress

and then prints it to the screen. I wonder if there is a possibility to allow to choose multiple values and pass them to function from one Validation set like so

JustAnExample -Fields IPAddress Cluster

Maybe there is a library for that or maybe I just missed something but I really can't find a solution for this.

2 Answers 2

10

If you want to pass multiple string arguments to the -Fields parameter, change it to an array type ([String[]]):

param(
    [Parameter(Mandatory=$false)]
    [ValidateSet("IPAddress","Timezone","Cluster")]
    [String[]]$Fields
)

And separate the arguments with , instead of space:

JustAnExample -Fields IPAddress,Cluster
Sign up to request clarification or add additional context in comments.

1 Comment

I have one more question. Is there a way to make those selections unique? because when I run the program I am able to choose 2 or more the same values. So what I want is to make the user be able only to choose one value from the given list. I was reading social.technet.microsoft.com/wiki/contents/articles/… but couldn't really find anything regards to this issue
1

@SokIsKedu, I had the same issue and could not find an answer. So I use the following inside the function:

function Test-Function {
    param (
        [ValidateSet('ValueA', 'ValueB')]
        [string[]] $TestParam
    )

    $duplicate = $TestParam | Group-Object | Where-Object -Property Count -gt 1
    if ($null -ne $duplicate) {
        throw "TestParam : The following values are duplicated: $($duplicate.Name -join ', ')"
    }

    ...
}

It does not prevent duplicates being passed in, but it does catch them.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.