Cmdlets and Functions most of the time support one or more parameters. Let’s take this simple function. It defines two parameters called number and force.
“You specified: number=$number, force=$force”
Note also that each parameter has been strongly typed: The function expects the number to be of type Integer and force to be a switch parameter – either present or not.
When you call “test” without specifying any parameter, the number defaults to 0 and the switch parameter force defaults to $false.
To specify parameters, either use positional parameters: simply submit the values in the order of the parameters:
Or use named parameters. As you will quickly discover, switch parameters do not support position. They always need to be stated by name. When using named parameters, order does not matter anymore:
test -number 100 -force
test -force -number 100
Note how switch parameters do not use a value. They are either present or not, and when they are present, they default to $true, else $false.
There is one little known exception. When you add a colon to a parameter name, you can assign a value to the parameter as well. Why would you do that? Both statements work the same:
A difference occurs with switch parameters. Since switch parameters do not accept a value, the following call would fail:
It would actually assign $false to the parameter $number, convert the Boolean to integer value 0 and set the force parameter to $true since the switch was present.
To bind a value to a switch parameter, use the colon like this:
This explicitly sets force to $false. It is the same as if you had omitted the force switch altogether.