読書とプログラミングを中心とした覚書ブログ

読書とプログラミングについて、日々経験したことを忘れないようにするため、極力ブログに記録を残すように頑張る。

PS1スクリプトを動かすための設定

 公開日     更新日  2014/12/14

iphone-388387-2

PowerShellは最近のWindowsで追加されたスクリプト言語で、今のWindowsなら一緒にインストールされてます。
PowerShellはBATファイルで記述する以上の複雑な事ができるため是非使い慣れておきたいところです。

PowerShellを使う場合、まず一番最初に、PowerShellを記述した拡張子PS1(テキスト形式)のファイルが実行できなくてつまづいてしまいがち。
最近、仕事で使う機会ができたということもあって何度も調べるのは億劫なため、PS1ファイルを実行させるための準備について簡単にまとめたいと思います。

なお本記事では、主に個人での利用として、ローカルに設置したPS1ファイルの実行を想定した内容ですので、以下の設定は省略しています。

  • 署名をつけることで信頼のあるスクリプトの正当性の確認
  • リモートやローカルの動作上の相違検証
    こちらは、記事中で紹介した参考サイトに詳しい記載はありました。

実行ポリシーによる実行結果の違い

早速ですが、実行ポリシーが本件に影響するポイントのようで、この点について以下のサイトを参考にさせてもらいました。

つまり、実行ポリシーがきちんと設定されていないとPS1ファイルは実行できません。
またWindowsをインストールした直後のデフォルト値は動作しない設定になっているものだから、最初につまずくポイントになってしまっているんですね。
これを表にまとめると、こういうことなんだと思います。

実行ポリシー署名スクリプトの場所実行結果
Restrictedありローカルエラー
リモート
なしローカル
リモート
AllSignedありローカル実行OK
リモート
なしローカルエラー
リモート
RemoteSignedありローカル実行OK
リモート
なしローカル
リモートエラー
Unrestrictedありローカル実行OK
リモート実行OK(確認つき)
なしローカル実行OK
リモート実行OK(確認つき)

かいつまんで順に見て行きたいと思います。

Restricted

Restricted – 実行できるスクリプトはありません。Windows PowerShell は対話型モードでのみ使用できます。

すべてのPS1ファイルの実行が禁止されているため、何も出来ない設定これがWindowsのデフォルト値です。

AllSigned

AllSigned – 信頼できる発行元が署名したスクリプトのみを実行できます。

PS1スクリプトの場所によらず署名がついていれば実行可能

RemoteSigned

RemoteSigned – ダウンロードしたスクリプトは信頼できる発行元が署名した場合にのみ実行できます。

ダウンロードしたスクリプトで、かつ、署名がついていない場合のみ実行不可。これ以外はすべてOK

Unrestricted

Unrestricted – 制限なし。すべての Windows PowerShell スクリプトを実行できます。

署名や場所のどの組み合わせでも実行可能。ただしダウンロードしたPS1スクリプトは実行前に実行許可の問診がある

個人利用での設定

ローカルにあるPS1スクリプトは実行許可したいけど、インターネットからダウンロードしたPS1スクリプトファイルは、基本的には実行したくありません。
これを実現する設定は、RemoteSignedUnrestrictedのいずれかです。

これらのどちらが良いのかについて、正直どちらが正解か調べきれてないですが、パッと見た感じで通常利用であれば個人的にはUnrestrictedでよいと思いました。

例えばRemoteSignedだと、ダウンロードしたPS1スクリプトは署名がないとエラーになりますが、署名付きだったら有無をいわさず動いてしまいます。
署名されているのだから問題ないはずだけど、個人利用なのだからそのようなスクリプトは普通は扱ってないと思います。
また、なんとなく勝手に動いてしまうというところに違和感があります。

対してUnrestrictedだと実行許可の確認があって、デフォルト値が実行しないになっているので、間違ってENTERキーを2回押してしまってもエラー終了してくれます。
という点から、普段はUnrestrictedで良いのかなと思います。

本当はRemoteSignedとUnrestrictedの中間にあるだろう良いとこどりの選択肢があれば良かった気がします。
つまり、ダウンロードしたスクリプトの場合、署名があれば確認つき実行許可、署名がなければエラー、と言う動きが一番欲しいんですよね…。

実行ポリシーの変更

大変な作業ではないですが、設定コマンドを転記。
なお設定コマンドは管理者権限が必要なのでPowerShellメニューを右クリックから「管理者として実行」で起動しておく必要があります。

 

レスポンシブ広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

  関連記事

SourceTreeのGit-Flow機能は納得の行かない動作をする

以前、こちらの記事(WindowsへGitとSourceTreeのインストール& …

.NETダイアログが表示されずスクリプトが止まる問題の対策

PowerShell入門中です。 先日のこちらの記事(PowerShellでダイ …

スマホやタブレットからパソコンを起動する

我が家のパソコンはリビングから離れた部屋にあるので、ちょっとした作業をするために …

EclipseのGradleプロジェクトでJMockitを使う設定をする

Javaの開発で使うツールと言えば、EclipseとJUNITは絶対にはずすこと …

MiniDV形式ビデオテープを撮影日時つきファイルでバックアップ[PowerShell版]

去年からちょいちょいPowerShellを使い出しました。 勉強の一環で、ちょっ …

WindowsへGitとSmartGit/Hgのインストール&セットアップ

SourceTreeは綺麗で使いやすかったのですが、Git-Flow機能がどうし …

WindowsへGitとSourceTreeのインストール&セットアップ

STINGERテンプレートへの独自の修正が多くなってしまったので、変更箇所の目的 …

GitHubへのWEBサイト作成用Markdown原稿をプレビューする環境をセットアップ

ソースリポジトリ管理サービスで一番有名であるGitHubにアカウントを取得後、G …

Android Studioをインストール

せっかくタブレットをゲットしたので、勉強も兼ねてAndroidアプリ開発をはじめ …

PowerShellでダイアログを表示し入力結果を取得

PowerShellの入門中です。 今回はPowerShellスクリプトからのW …

PS1スクリプトを動かすための設定