地味にハマったので。
パスが通っている場合
Scoop でインストールすればイイ感じに設定してくれるので実行ファイル名だけで簡単に呼び出せます。
ls -name | peco.exe
.exe
なしで ls -name | peco
とさらに簡略化することもできますが、実行ファイルであることを明示しておいたほうが安心なので個人的には残すことが多いです。
パスが通っていない場合
パターン A: パスが固定
フルパスを指定します。
このときに引用符で囲んでしまうと文字列扱いになってエラーになります。
ls -name | C:\Users\tools\peco\peco.exe
パターン B: パスを動的に指定したい
ハマったのはこのパターン。
自作ツールをクラウド経由で同期して複数PCで使いたいとき、 PC によって変わるユーザー名部分に自動変数 $env:USERNAME
で対処しようとしたのですが、 "C:\Users\$($env:USERNAME)\Dropbox\tool\mytool.exe"
などと引用符で変数展開しようとすると上記の通り文字列扱いになって正常に動作しません。
Start-Process
にパイプしてもエラーとなり、それなら -ArgumentList
を使えばと思っても配列はただの空白区切り文字ととしてパラメータに渡されるらしく、期待する動作は叶いません。
正解は下記でした。
ls -name | & "C:\Users\$($env:USERNAME)\Dropbox\tool\mytool.exe"
実行演算子( call operator )の &
を使えばよかったようです。スクリプトブロックの実行にばかり使っていた盲点でした( 参考サイト )。
&
単体で google 検索に引っかからずに苦戦していたところ、この記号が “ampersand” ということを知りました。検索スキルという意味でどちらかというとこの学びのほうが大きかったというオチ……。