いかたけの備忘録

忘れっぽい

powershellで書いたプログラムを右クリックから呼び出したい

何の話?

大まかにいうと、この2個の合わせ技になります。

4thsight.xyz

office54.net

「送る」メニューに表示させる

参照記事②より

  1. WindowsキーとRキーを同時押しする。
  2. 「ファイル名を指定して実行」に「shell:sendto」を入力してOKを押す。
  3. C:\Users\○○\AppData\Roaming\Microsoft\Windows\SendTo が開くのを確認する。
  4. SendToフォルダの中にps1ファイルのショートカットを置く。

の手順となります。ここで4.のps1ファイルのショートカットですが、参照記事①より、(1)PowerShellのexe、(2)実行ポリシー、(3)ps1ファイルの順で記載する必要があります。今回の場合は

"C:\Program Files\PowerShell\7\pwsh.exe" -ExecutionPolicy RemoteSigned -File C:\○○\××.ps1

となりました。

レジストリに登録する

参照記事②より

  1. WindowsキーとRキーを同時押しする。
  2. 「ファイル名を指定して実行」に「regedit」を入力してOKを押す。
  3. レジストリエディタが開くのを確認する。
  4. レジストリエディタでコンピューター\HKEY_CLASSES_ROOT\*\shellとたどっていく。
  5. shellを右クリックして「新規」「キー」と選択する。
  6. フォルダ名みたいなのを変更する
  7. 右クリックして「新規」「キー」と選択する。
  8. 追加されたキーの名前をcommandに変更する。
  9. commandの右ペインから(既定)を右クリックして「修正」を選択する。
  10. 値のデータに実行するアプリケーションのパスを入力する。

の手順となります。ここで10.のアプリケーションのパスですが、どうも末尾に「 ”%1」を入れる必要があるようです。それ以外は送るメニューに追加した時と同じになります。従って今回の場合は、

"C:\Program Files\PowerShell\7\pwsh.exe" -ExecutionPolicy RemoteSigned -File C:\○○\××.ps1 "%1"

となりました。

PowerShellスクリプトをショートカットなどで実行する場合は、ps1ファイルを直接指定するのではなく、PowerShellのexeファイルの引数として記載しなければならない。というところがミソになってくるのでしょうか。