powershell constraints on arguments


I need a little help on how I can enforce the following constraints on the arguments to a powershell script. Can I specify these constraints with in the param section.

  1. At least one argument constraint
  2. At most one argument constraint

For example, (just an example, it’s not what I am doing) to a script called ReadPlainText.ps1, I would like to give only either of the two arguments: Lines or Chars, but not both. The command ReadPlainText.ps1 Sample.txt -Lines 20 -Chars 10 should result in an error. Similarly, the command ReadPlainText.ps1 Sample.txt should result in error.


You can, in PSH V2, do this will parameter attributes and by putting the two parameters into different parameter sets.

A parameter set is a group of parameters that go together, a command can have multiple parameter sets and only one is available. Parameters not assigned to a parameter group are available across all parameters. This can be seen in the standard cmdlets (removing the common parameters):

To achive this in a script or function:

  • Add [CmdletBinding] as the first non-comment. (A default parameter set can be specified here.)
  • In the param block decorate parameters with the Parameter attribute to specify mandatory and the parameter set.


To access the parameter set in use $PSCmdlet which gives access to the same information available within cmdlets written C# or VB.


powershell constraints on arguments by licensed under CC BY-SA | With most appropriate answer!

Leave a Reply