0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Powershellの引数ではまった話

Posted at

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の引数指定にはまった話でした。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?