@PetSerAl a déjà indiqué quel était votre malentendu, mais peut-être était-ce un peu trop bref, alors je vais développer un peu plus.
A [switch]
ne prend pas de valeur comme les paramètres ordinaires. Vous le définissez normalement à true ou false respectivement en fournissant ou en omettant le paramètre :
PS C:\\> **Get-Content .\\test.ps1**
Param(
\[string\]$Content = $null,
\[switch\]$Flag
)
$flag.IsPresent
$Content
PS C:\\> **.\\test.ps1**
False
PS C:\\> **.\\test.ps1 -Flag**
True
Vous pouvez également transmettre explicitement une valeur en mettant deux points entre le paramètre de commutation et la valeur :
PS C:\\> **.\\test.ps1 -Flag:$false**
False
PS C:\\> **.\\test.ps1 -Flag:$true**
True
Les espaces blancs après les deux points sont autorisés, mais pas avant ( -Flag: $false
passe $false
comme valeur de commutation, -Flag :$false
ne le fait pas).
Si vous essayez d'assigner la valeur du commutateur sans les deux-points, la valeur est en fait transmise au paramètre suivant dans la ligne, dans votre cas le -Content
paramètre :
PS C:\\> **.\\test.ps1 -Flag $false**
True _\# value of the parameter $Flag_
False _\# value of the (positional) parameter $Content_
PS C:\\> **.\\test.ps1 -Flag -Content $false**
True _\# value of the parameter $Flag_
False _\# value of the (named) parameter $Content_
Si vous utilisez -Flag $true
(sans les deux points) y passer une valeur au paramètre (nommé) -Content
la valeur $true
est passé en tant que troisième paramètre sans nom (accessible via la balise variable automatique $args
), comme si vous aviez mis la valeur à la fin de la déclaration :
PS C:\\> **Get-Content .\\test2.ps1**
Param(
\[string\]$Content = $null,
\[switch\]$Flag
)
$flag.IsPresent
$Content
$args\[0\]
PS C:\\> **.\\test2.ps1 -Flag $false -Content 'something'**
True
something
False _\# $false passed as unnamed 3rd parameter_
PS C:\\> **.\\test2.ps1 -Flag:$false -Content 'something'**
False _\# $false passed as explicit value of switch parameter $Flag_
something
PS C:\\> **.\\test2.ps1 -Flag -Content 'something' $false**
True
something
False _\# $false passed as unnamed 3rd parameter_