Posted at

Powershellを楽に実行してもらうには

More than 3 years have passed since last update.


PowerShellで何かつくったよ!


実行できない(´・ω・`)

せっかくPowershellでつくったのに、いざみんなに使ってもらおうと思ったら実行できない/実行方法を説明するのも大変…といったことはありませんか?

私はありました。

~みんなの声~

「ダブルクリックしたらソースが表示されたんだけど…」せやねん

「実行したら赤字でエラー出てきた 失敗?」ちゃうねん

「なんでbatじゃないの」PS好きやねん

かなしい。


実行ポリシーあるからね

Powershellはデフォルトの設定ではどうあがいてもスクリプトを実行できないようになっています(下記表のRestricted)。

batみたいに「あ、実行したくないのにうっかりダブルクリックしちゃった!」を防ぐには大変有効な設定なのですが、同時に煩わしい点でもあります。

この設定のことは実行ポリシー(セキュリティポリシー)といって、以下の4つがあります。

引数
ローカル
リモート

Restricted
×
×

AllSigned
署名付きのみ〇
署名付きのみ〇

RemoteSigned

署名付きのみ〇

Unrestricted

※リモート:インターネットからDLしてきたps1、または別サーバ上のps1

※署名付きの話は割愛します

今の実行ポリシーを確認するときは以下、

Get-ExecutionPolicy

実行ポリシーを変更するときは上記表の引数を指定して実行します。

(※レジストリを変更するので管理者権限でPowershellを実行してください)

Set-ExecutionPolicy 引数

自分のローカルにあるps1を実行するには、RemoteSignedで十分です(`・ω・´)

というわけで、上記を踏まえたうえで(なるべく)楽にPowershellを実行してもらうにはどうしたらいいのかをまとめました。


コマンドラインから実行してもらう

コマンドラインから実行してもらう場合のお話。

ただ、普段から使っているならそもそも実行でつまづかないかも…


powershell編

配布ファイル:「hogehoge.ps1」


  1. Powershellを管理者権限で起動します

  2. ps1配置場所に移動します(Set-Location)

  3. 実行ポリシーを変更します

    Set-ExecutionPolicy RemoteSigned⇒yes

  4. 実行します

    .\hogehoge.ps1

  5. 実行ポリシーを戻します

    Set-ExecutionPolicy Restricted⇒yes

※ 4.でhogehoge.ps1の絶対パスを指定する場合、2.は不要です。


コマンドプロンプト編

配布ファイル:「hogehoge.ps1」


  1. コマンドプロンプトを起動します(cmd)

  2. ps1配置場所に移動します(cd)

  3. 実行します

    powershell -NoProfile -ExecutionPolicy Unrestricted .\hogehoge.ps1

※ 3.でhogehoge.ps1の絶対パスを指定する場合、2.は不要です。

※ 3.は一時的に実行ポリシーを変更しているだけなので、元に戻す操作は不要です。


ダブルクリックで実行してもらう

「やっぱりbatみたいにダブルクリックで実行したい><!」という場合のお話。

別ファイルを作ることになりますが、実行ステップは(ちょっと)少なくできます。


ショートカット作成編

配布ファイル:「hogehoge.ps1」


  1. ps1のショートカットを作成します

  2. ショートカットの右クリックプロパティ>リンク先の前に以下を追加します

    powershell -ExecutionPolicy RemoteSigned -File

  3. ショートカットをダブルクリックして実行します


bat作成編

あらかじめ、実行用のbatを作成します。

※powershellから始まる行以外は特になくても構いません。


run.bat

@echo off

echo 〇〇〇をしています…
powershell -NoProfile -ExecutionPolicy Unrestricted .\hogehoge.ps1
echo 完了しました!
pause > nul
exit

配布ファイル:「hogehoge.ps1」「run.bat」


  1. batとps1を同ディレクトリに配置します

  2. batをダブルクリックして実行します


おわり

これでもう怖くない。゚+.*(+・`ω・)9 !!