powershell - Positional parameter binding with values starting with a minus/hyphen -
here powershell test script:
param( [parameter(mandatory=$true, position=0)] [int]$val ) write-output $val;
now want call this:
powershell -executionpolicy bypass -file ".\testscript.ps1" "-1"
the error is:
a parameter cannot found matches parameter name '1'.
note have no control on way application calls script (i.e. can not make application call script -val:-1
). binding has positional. how can make script bind -1
$val
param
block?
if can't fix how application calls script other option see drop named parameters entirely , use $args
collection instead:
c:\>type test.ps1 [int]$val = $args[0] write-output $val c:\>powershell -executionpolicy bypass -file test.ps1 -1 -1
by casting argument [int]
type safety still enforced:
c:\>powershell -executionpolicy bypass -file test.ps1 a cannot convert value "a" type "system.int32". error: "input string not in correct format." @ c:\users\cobalt\documents\test\test.ps1:1 char:1 + [int]$val = $args[0] + ~~~~~~~~~~~~~~~~~~~~ + categoryinfo : metadataerror: (:) [], argumenttransforma... + fullyqualifiederrorid : runtimeexception
Comments
Post a Comment