Powershellの引数ではまった話
以下の関数をご覧ください
function test_func([int]$x,[int]$y){
Write-Host($x)
}
この関数に以下の通り数値を2つ引き渡すと、エラーが出力されます
test_func(3,4)
test_func : パラメーター 'x' の引数変換を処理できません。"System.Object[]" の値を "System.Object[]" 型から "System.Int3
2" 型に変換できません。
発生場所 行:1 文字:10
+ test_func(3,4)
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [test_func]、ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,test_func
int変換に失敗しているということで以下の通り修正して実行してみると
function test_func($x,$y){
Write-Host($x)
}
なんと(3,4)という一つの配列扱いされてしまっているのです
test_func(3,4) # 3,4
以下のように変数に収めようと無駄です
$a = 4
$b = 9
test_func($a,$b) # 4,9
stringに使用が配列扱いです。
結局以下の通り宣言するのが正しいようでした
test_func $a $b # 4
ただ関数のように指定もできるときもあるため
この現象の原因は結局わからずじまいでした。
そもそもPowershellはShellに近い書き方なので
()内に指定する方があまり意図しない指定の仕方なのかもしれないです
以上、Powershellの引数指定にはまった話でした。