なうびるどいんぐ

脳みそ常時-3dB

[Windows]SendToでPowerShellを使いたい時の苦労

      2018/03/17    HimaJyun

SendToというのはファイルを右クリックした時にある「送る」の事です。

このSendToした時にPowerShellを使いたいと思ったら色々と苦労したので備忘録

スポンサーリンク

SendTo+PowerShell=ツライ

ツライポイント解説

そもそもPowerShellが起動できない

そもそもの話、PowerShellスクリプト(つまりps1ファイル)、もしくはそれのショートカットをSendToに入れても使えません。(SendTo(送る)に出てきてくれない)

それもそのはずで、SendToはps1を認識しない。(exeとbatしか認識しない?)

対処法としては、SendToにショートカットを作成し、リンク先として「powershell スクリプト.ps1」を指定する。

すなわち「PowerShellを起動してから、そこからスクリプトを呼び出す」のようにする必要がある。

ファイルパスの扱いが残念過ぎる

これで引数で受け取ったファイルを扱うようなスクリプトを呼び出そうとすると確実に嵌ります。

「PowerShellを起動してからスクリプトを起動する」という構成になっているので、引数として渡されたファイルパスに空白があるとそこで複数の引数として分割されます。地獄か何か?

これは-Fileオプションを使う事でどうにかする事が出来る。

「powershell -File "スクリプトの絶対パス.ps1"」という風にすればよい

スクリプトは絶対パスで指定する必要があるが、大抵望み通りに動く。

細々した色々

もう既に「まぁWindowsだし?」みたいな気分になってきたのでちょっと箸休め

著作権表示を非表示にしたい時は「-NoLogo」オプションを付ける

処理終了後に終了しない(そのままPowerShellを使いたい)時は「-NoExit」オプション

逆にウインドウとか出さずに静かに処理して欲しい時は「-WindowStyle Hidden」で

-Fileだとコマンドを呼び出せない

-Fileの場合はスクリプトを絶対パスで指定する必要があります。

つまり、「PowerShellで実装した自作コマンド」を呼び出したい時に(PATHが通っているにもかかわらず)絶対パスでファイルを指定する事になり二度手間感満載

かと言って-Commandを使うと空白パスを扱えないという問題に帰結し、堂々巡り。(ちなみに-Commandと-Fileを同時に使う事は出来ない)

これはどうしようもない感じで、どうにかしたかったらどうにかするバッチみたいなので橋渡しするしかない。

諦めて絶対パスで指定する方が低コスト

SendToは苦行

PowerShell自体は……まぁ.NETが呼び出せるのでそこそこに色々出来て便利ではあるのですが……SendToが辛い

というより、「SendToとPowerShellを組み合わせた時の引数の解釈が辛い」

SendTo側がどうにか進化して「PowerShellを呼び出して、そこからスクリプトを呼び出す」みたいにしなくても良いように(直接ps1スクリプトを実行できるように)なれば良い気がするんですけど……

 - コンピューター