2
0

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】実行演算子にパラメータを渡す

Last updated at Posted at 2020-07-15

以前の記事 で書いた実行演算子 & でファイルを実行しようとしたとき、思いつくまま下記のようにパラメータを指定したらエラーになりました。

# これはエラー
& "C:\Users\my script folder\mytool.exe --param hoge"

解決策

引用符の外側に書いてやればよかったようです。

& "C:\Users\my script folder\mytool.exe" --param "hoge"

変数を渡すこともできます。

& "C:\Users\my script folder\mytool.exe" --param $fuga

パラメータ名部分は文字列として指定することもできました。

& "C:\Users\my script folder\mytool.exe" "--param" $fuga

実行ファイル名までが演算子の対象なのかと思って括弧でくくってみたらエラー。
& はそれ以降の文全体を対象にしているようです。

# これはエラー
(& "C:\Users\my script folder\mytool.exe") "--param" $fuga

パラメータは配列として渡すこともできるようです。

& "C:\Users\my script folder\mytool.exe" @("--param",$fuga)

なお、配列として扱う場合はパラメータ名も文字列とする必要があるようです(引用符を外したらエラーになりました)。

# これはエラー
& "C:\Users\my script folder\mytool.exe" @(--param, $fuga)

@ を省略してもいい模様。

& "C:\Users\my script folder\mytool.exe" ("--param",$fuga)

でも流石に括弧まで外すとエラーになりました。

# これはエラー
& "C:\Users\my script folder\mytool.exe" "--param",$fuga

パラメータが複数ある場合も基本的には同じようなのですが……

& "C:\Users\my script folder\mytool.exe" --param1 $foo --param2 $baa
& "C:\Users\my script folder\mytool.exe" "--param1" $foo "--param2" $baa
& "C:\Users\my script folder\mytool.exe" ("--param1",$foo) ("--param2",$baa)

配列でパラメータ名と値を結びつけているのかな、と思ったら少し違うようです。配列を展開して順に渡しているのでしょうか🤔。

# これはエラー
& "C:\Users\my script folder\mytool.exe" ("--param1",$foo),("--param2",$baa)

# これはエラーにならない
& "C:\Users\my script folder\mytool.exe" ("--param1",$foo,"--param2",$baa)

変数を渡すのでなければ stop-parsing symbol (パース終了シンボル?)の --% を使えばいいようです。

& "C:\Users\my script folder\mytool.exe" --% --param hoge
2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?