#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」
- Powershellを管理者権限で起動します
- ps1配置場所に移動します(Set-Location)
- 実行ポリシーを変更します
Set-ExecutionPolicy RemoteSigned
⇒yes - 実行します
.\hogehoge.ps1
- 実行ポリシーを戻します
Set-ExecutionPolicy Restricted
⇒yes
※ 4.でhogehoge.ps1の絶対パスを指定する場合、2.は不要です。
##コマンドプロンプト編
配布ファイル:「hogehoge.ps1」
- コマンドプロンプトを起動します(cmd)
- ps1配置場所に移動します(cd)
- 実行します
powershell -NoProfile -ExecutionPolicy Unrestricted .\hogehoge.ps1
※ 3.でhogehoge.ps1の絶対パスを指定する場合、2.は不要です。
※ 3.は一時的に実行ポリシーを変更しているだけなので、元に戻す操作は不要です。
#ダブルクリックで実行してもらう
「やっぱりbatみたいにダブルクリックで実行したい><!」という場合のお話。
別ファイルを作ることになりますが、実行ステップは(ちょっと)少なくできます。
##ショートカット作成編
配布ファイル:「hogehoge.ps1」
- ps1のショートカットを作成します
- ショートカットの右クリックプロパティ>リンク先の前に以下を追加します
powershell -ExecutionPolicy RemoteSigned -File
- ショートカットをダブルクリックして実行します
##bat作成編
あらかじめ、実行用のbatを作成します。
※powershellから始まる行以外は特になくても構いません。
@echo off
echo 〇〇〇をしています…
powershell -NoProfile -ExecutionPolicy Unrestricted .\hogehoge.ps1
echo 完了しました!
pause > nul
exit
配布ファイル:「hogehoge.ps1」「run.bat」
- batとps1を同ディレクトリに配置します
- batをダブルクリックして実行します
#おわり
これでもう怖くない。゚+.*(+・`ω・)9 !!