DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

Cover image for PowerShell - Using Parameter Sets
Marcel.L
Marcel.L

Posted on • Updated on

PowerShell - Using Parameter Sets

πŸ’‘ 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")]
Enter fullscreen mode Exit fullscreen mode

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,
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.

testFunctionAnimation

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 | 🐧 Twitter | πŸ‘Ύ LinkedIn

Top comments (2)

Collapse
 
cbergmeister profile image
Chris Bergmeister • Edited on

Two suggestions:

  • Mandatory property on parameters default to false, therefore you could make the code easier to read by just removing all the Mandatory=$false bits. As an aside: When adding the Mandatory 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...
  • Use .IsPresent property on switch parameters so that the person reading the code knows it's a switch paramter docs.microsoft.com/en-us/dotnet/ap...
Collapse
 
pwd9000 profile image
Marcel.L

Those are awesome tips @cbergmeister Thank you!

πŸ‘‹ Hey, my name is Noah and I’m the one who set up this ad. My job is to get you to join DEV, so if you fancy doing me a favor, I’d love for you to create an account.

If you found DEV from searching around, here are a couple of our most popular articles on DEV: