💡 What are parameter sets in PowerShell and how to use them
Have you ever wondered when you are writing a PowerShell function or commandlet how you can make only certain parameters be presented to the consumer of the function in certain scenarios? That's where parameter sets come in. 😄
We will look at the following test function: [Test-ParameterSets]
on exactly how this functionality can be used.
The first step is to add a DefaultParameterSetName="Default"
. We can set that in our [CmdletBinding()]
as follow:
// code/demo-function.ps1#L2-L2
[CmdletBinding(SupportsShouldProcess, DefaultParameterSetName="Default")]
By declaring a default parameter set name on our [CmdletBinding()]
will set all of our parameters defined under the Default
set. What we will do next is define which parameters needs to be presented if the parameter switch $A
is used. We do not want to present parameters from switch $B
in this case. We will do this by defining a new parameter set name and grouping the parameters we want to be part of that particular set.
// code/demo-function.ps1#L8-L13
[Parameter(Mandatory=$false, ParameterSetName="A")]
[Switch]$A,
[Parameter(Mandatory=$false, ParameterSetName="A")]
[string]$AParameter1,
[Parameter(Mandatory=$false, ParameterSetName="A")]
[string]$AParameter2,
We will also give parameter switch $B
and it's corresponding parameters, it's own parameter set name.
// code/demo-function.ps1#L14-L19
[Parameter(Mandatory=$false, ParameterSetName="B")]
[Switch]$B,
[Parameter(Mandatory=$false, ParameterSetName="B")]
[string]$BParameter1,
[Parameter(Mandatory=$false, ParameterSetName="B")]
[string]$BParameter2
Now that we have defined our parameter sets and grouped the relevant parameters according to their sets our function/Cmdlet will now only present corresponding parameters based on which switch is used when calling the function/Cmdlet.
You can also find some very helpful documentation on parameter sets on Microsoft Docs.
I hope you have enjoyed this post and have learned something new. You can also find the code samples used in this blog post on my GitHub page. ❤️
Author
Like, share, follow me on: 🐙 GitHub | 🐧 X/Twitter | 👾 LinkedIn
Top comments (2)
Two suggestions:
Mandatory
property on parameters default to false, therefore you could make the code easier to read by just removing all theMandatory=$false
bits. As an aside: When adding theMandatory
attribute one doesn't even need to assign a value, one can do just[Parameter(Mandatory]
, which makes it nicer to read. docs.microsoft.com/en-us/dotnet/ap....IsPresent
property onswitch
parameters so that the person reading the code knows it's a switch paramter docs.microsoft.com/en-us/dotnet/ap...Those are awesome tips @cbergmeister Thank you!