この回答は、David Brabant と彼のコメント作成者によって既に提供されているものを少し拡張したものです。これらの発言はすべて真実で適切ですが、見落とされているものがあります。
&
外部コマンドを呼び出す際の OP の使用は不要です。を省略し&
ても効果はありません (彼の使用例では)。の目的は&
、名前が (文字列) 式の値であるコマンドの呼び出しを許可することです。上記を使用することにより&
、powershell は (本質的に) 後続の引数を文字列として扱います。最初の引数は、&
正式に呼び出すコマンド名です。が省略された場合、powershell は実行するコマンドとして&
行の最初の項目を取ります。
ただし、.
2番目の例は必要です(ただし、他の人が指摘したよう&
に、この場合も同様に機能します)。これがないと、コマンド ラインは変数アクセス ( $env:systemdrive
) で始まるため、powershell は何らかの形式の式を期待します。ただし、変数参照の直後にあるのは有効な式ではない裸のファイル パスであり、エラーが発生します。.
行の先頭に(または)を使用する&
ことで、コマンドとして扱われるようになり (先頭が有効な式のように見えないため)、引数は展開可能な文字列 ( " "
) として処理されます。したがって、コマンドラインは次のように扱われます。
. "$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd" "install" "notepadplusplus"
最初の引数が$env:systemdrive
それに代入され、その.
ように名付けられたプログラムを呼び出します。
注: powershell がコマンド ライン引数を処理する方法の完全な説明は、ここで説明するよりもはるかに複雑です。このバージョンは、質問に答えるのに必要な部分だけに切り詰められています。包括的な説明については、about_Parsingをご覧ください。完全ではありませんが、ほとんどの通常の使用法をカバーする必要があります。stackoverflow と github (powershell が現在存在する場所) には、公式ドキュメントに記載されていない一見風変わりな動作のいくつかをカバーする他の投稿があります。もう 1 つの便利なリソースはabout_Operatorsですが、これも完全ではありません。例としては、powershell スクリプト/コマンドレット以外の何かを呼び出すときと同等で.
あり、まったく言及されていません。&