Когда вы делаете:
Move-ActiveMailboxDatabase -Confirm $false
Вы не говорите, Confirm
параметр принимает $false
. Вы говорите -Confirm
, а также передаете (отдельный) аргумент командлету со значением $false
.
Поскольку Confirm
является переключателем, наличие -Confirm
означает, что оно истинно. Отсутствие -Confirm
означает, что это ложно.
Позвольте привести пример сценария:
param([switch]$test)
write-host Test is $test
Если вы просто запустите скрипт без каких-либо аргументов / параметров, т.е. .\script.ps1
, вы получите вывод:
Test is False
Если вы запустите его как .\script.ps1 -test
, вывод будет
Test is True
Если вы запустите его как .\script.ps1 -test $false
, вывод будет
Test is True
Если вы запустите его как .\script.ps1 -test:$false
, вы получите
Test is False
В сценариях, где значение самой переменной переключателя должно быть определено из другой переменной, используется :
.
Например, рассмотрим скрипт:
param ([boolean]$in)
function func([switch] $test){
write-host Test is $test
}
func -test:$in
Здесь, если вы запустите его как .\script.ps1 -in $false
, вы получите
Test is false
Если бы вы не смогли использовать :
, вам пришлось бы написать его как:
if($in){ func -test}
else { func }