はじめに
職場で見たPowerShellのスクリプトで、外部プログラム(.exeや.ps1など)を実行する方法が幾つかあることを知ったので、今回はそれを記事としてまとめてみました。
プログラムを実行する方法
パスが通っている場合
- パスが通っている場合は、以下のようにプログラム名を直接入力するだけで実行できます。
- コマンドプロンプトでお馴染みの書き方です。
- 拡張子が無くても実行できますが、何となく拡張子も入力した方がしっくりする気がします。(※個人の感想です)
パスが通っている場合
> calc
パスが通っていない場合
- パスが通っていない場合は、絶対パスもしくは相対パスでプログラムを実行します。
- これもコマンドプロンプトでお馴染みの書き方です。
- ここまでは当たり前レベルの話となりますが...
パスが通っていない場合
> C:\test\hoge.ps1
パス中に空白が存在する場合:「&」の利用
- パス中に空白が存在する場合、
コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません
というエラーメッセージが出てしまいます。
パス中に空白が存在する場合に生じるエラー
PS C:\Users\NKOJIMA> C:\Program Files (x86)\sakura\sakura.exe
x86 : 用語 'x86' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください
。
発生場所 行:1 文字:19
+ C:\Program Files (x86)\sakura\sakura.exe
+ ~~~
+ CategoryInfo : ObjectNotFound: (x86:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
- パス中に空白が存在する場合は、以下のようにパスの前に
&
を入れることで空白があってもプログラムを実行できるようになります。- この書き方はPowerShellに慣れていない人には分かりづらいかもしれません。
パス中に空白が存在する場合
PS C:\Users\NKOJIMA> & "C:\Program Files (x86)\sakura\sakura.exe"
パス中に空白が存在する場合:Start-Processの利用
- 以下のように
Start-Process
コマンドレットを利用することでも、「パス中に空白が存在する場合の問題」を回避した上で外部プログラムを実行できます。-
パスの前に
&を入れるよりも、Start-Process
を使った方が分かりやすい書き方だと感じました。
-
Start-Processコマンドレットの利用
PS C:\Users\NKOJIMA> Start-Process "C:\Program Files (x86)\sakura\sakura.exe"