Parameter sets
Parameter sets are used to limit the possible combination of parameters, or to enforce the use of parameters when 1 or more parameters are selected.
The examples will explain the use and reason of a parameter set.
Parameterset to enforce the use of a parmeter when a other is selected.
Section titled “Parameterset to enforce the use of a parmeter when a other is selected.”When you want for example enforce the use of the parameter Password if the parameter User is provided. (and vise versa)
Function Do-Something{ Param ( [Parameter(Mandatory=$true)] [String]$SomeThingToDo, [Parameter(ParameterSetName="Credentials", mandatory=$false)] [String]$Computername = "LocalHost", [Parameter(ParameterSetName="Credentials", mandatory=$true)] [String]$User, [Parameter(ParameterSetName="Credentials", mandatory=$true)] [SecureString]$Password )
#Do something}
# This will not work he will ask for user and passwordDo-Something -SomeThingToDo 'get-help about_Functions_Advanced' -ComputerName
# This will not work he will ask for passwordDo-Something -SomeThingToDo 'get-help about_Functions_Advanced' -UserParameter set to limit the combination of parmeters
Section titled “Parameter set to limit the combination of parmeters”Function Do-Something{ Param ( [Parameter(Mandatory=$true)] [String]$SomeThingToDo, [Parameter(ParameterSetName="Silently", mandatory=$false)] [Switch]$Silently, [Parameter(ParameterSetName="Loudly", mandatory=$false)] [Switch]$Loudly )
#Do something}
# This will not work because you can not use the combination Silently and LoudlyDo-Something -SomeThingToDo 'get-help about_Functions_Advanced' -Silently -LoudlySimple parameter sets
Section titled “Simple parameter sets”function myFunction{ param( # If parameter 'a' is used, then 'c' is mandatory # If parameter 'b' is used, then 'c' is optional, but allowed # You can use parameter 'c' in combination with either 'a' or 'b' # 'a' and 'b' cannot be used together
[parameter(ParameterSetName="AandC", mandatory=$true)] [switch]$a, [parameter(ParameterSetName="BandC", mandatory=$true)] [switch]$b, [parameter(ParameterSetName="AandC", mandatory=$true)] [parameter(ParameterSetName="BandC", mandatory=$false)] [switch]$c ) # $PSCmdlet.ParameterSetName can be used to check which parameter set was used Write-Host $PSCmdlet.ParameterSetName}
# Valid syntaxesmyFunction -a -c# => "Parameter set : AandC"myFunction -b -c# => "Parameter set : BandC"myFunction -b# => "Parameter set : BandC"
# Invalid syntaxesmyFunction -a -b# => "Parameter set cannot be resolved using the specified named parameters."myFunction -a# => "Supply values for the following parameters:# c:"