When you do:
Move-ActiveMailboxDatabase -Confirm $false
you are not saying Confirm
parameter accepts the $false
. You are saying -Confirm
and also passing an (separate) argument to the cmdlet with value $false
.
Since Confirm
is a switch, just the presence of -Confirm
means it is true. Absence of -Confirm
means it is false.
Let me give you a script example:
param([switch]$test)
write-host Test is $test
If you just run the script without any arguments / paramters i.e .\script.ps1
you get output:
Test is False
If you run it as .\script.ps1 -test
, the output is
Test is True
If you run it as .\script.ps1 -test $false
, the output is
Test is True
If you run it as .\script.ps1 -test:$false
the output is
Test is False
It is in scenarios where the value for a switch variable itself has to be determined from another variable that the :
is used.
For example, consider the script:
param ([boolean]$in)
function func([switch] $test){
write-host Test is $test
}
func -test:$in
Here if you run it as .\script.ps1 -in $false
, you get
Test is false
If you weren’t able to use the :
, you would have had to write it as:
if($in){ func -test}
else { func }