こんにちは。チェシャ男です。(-皿-)
今回は、
【PowerShell スクリプトの実行ポリシー確認方法】
について紹介します。
PowerShell 入門者がスクリプト実行時にはまる最初の落とし穴。
「作ったスクリプトが実行できない!」
その原因(の多く)は、実行ポリシーです。 作ったスクリプトが実行できない場合の原因特定方法をご紹介します。
実行ポリシーの変更方法を知りたい場合はこちら↓の記事をご参考ください!
[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/sequrity/set-executionpolicy/”]
もくじ
エラー発生の確認と原因
では試しにスクリプトを作成し実行してみましょう。
検証に使用するスクリプトをこの1行だけ書いておきます。。
Write-Host -Object "I am Cheshire Boy"
たった1行ですが、”test.ps1” と名前を付けた、このスクリプトファイルを使用します。
スクリプト実行エラー内容を確認してみる
先ほどのスクリプトを実行してみます。すると 以下のようなエラーが出力されましたか?
(※ Cドライブ直下で”test.ps1″を実行した場合です)
PS C:\work> .\test.ps1 .\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\work\test.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください 。 発生場所 行:1 文字:1 + .\test.ps1 + ~~~~~~~~~~ + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
出力されたエラー文の7行目をみてみましょう。
”セキュリティ エラー: (: ) []、PSSecurityException”
セキュリティのエラーが発生していることが分かりますね。
このセキュリティエラーの原因が”実行ポリシー”です。
実行できない原因、”実行ポリシー”とは
エラー文から発覚したセキュリティエラーは、
実行ポリシー
です。では、”実行ポリシー“とは何者なのでしょうか。
実行ポリシーとは「PowerShell スクリプトの実行が可能かどうかを制御するためのポリシー(方針)」の事を指します。
たとえば、
- どんなスクリプトファイルも実行してはダメ!
- インターネットで落としてきたファイルじゃなければ許す!
- 基本許可!インターネットで落としてきたものは確認とるよ!
- 全て許そう。。。
のように実行して良いかの約束事としてポリシーが定められています。
実行ポリシーはセキュリティ強化の一環として設定されいてるため、PowerShell を利用した悪質なファイルやウィルスから、知識の無い人を守っているのです。
あなたのパソコンも、この実行ポリシーに守られていたかもしれませんね。
では、このポリシーの種類について見てみましょう。
実行ポリシー | 内容 | ローカル | リモート |
Restricted | 全てのスクリプトが制限(Restrict)される。 | × | × |
AllSigned | 全て(All)の署名付き(Signed)スクリプトのみ実行可能。 署名がないものは実行禁止。 |
△ (※署名付のみ可) |
△ (※署名付のみ可) |
RemoteSigned | ローカルのファイルは実行可能。 インターネットからダウンロードした外部のスクリプト(Remote)は署名(Signed)が必要。 |
○ | △ (※署名付のみ可) |
Unrestricted | 全てのスクリプトが制限なし(Unrestrict)。 ただし、インターネットからダウンロードしたファイルは実行時、確認される。 |
○ | ○ (※確認あり) |
Bypass | 警告や確認なしに、すべてのファイルが実行可能。 | ○ | ○ |
ご覧のように、”Restricted” が指定されているとスクリプトの実行が制限されています。
PowerShell のデフォルトは、この ”Restricted” が設定されています。
ただし Windows Server2012 R2 からのサーバ OS は ”RemoteSigned” がデフォルトとして設定されています。(手間が減るので嬉しいですね)
※ちなみに今回はスクリプト(.ps1)の話ですが、PowerShell における書式設定ファイル・構成ファイル・モジュールスクリプトファイル・PowerShell プロファイルを含む全てのスクリプトファイルの実行に反映されます。
Get-ExecutionPolicy で実行ポリシーの取得
現在有効な実行ポリシーを取得する場合に使用するコマンドレットに
Get-ExecutionPolicy
というものがあります。
[blogcard url=”https://cheshire-wara.com/powershell/ps-help/get-executionpolicy-help/”]【コマンドレット】
Get-ExecutionPolicy
【オプション】
-Scope <確認範囲のスコープ>
-List【入力】
Microsoft.PowerShell.ExecutionPolicyScope
【出力】
Microsoft.PowerShell.ExecutionPolicy
【エイリアス】
なし
Get-ExecutionPolicy の実行
では、先ほどのエラーが本当に ”Restricted” によるものなのか。
コマンドレットで実際に確認してみましょう。
PS C:\> Get-ExecutionPolicy Restricted
”Restricted” に設定されていることが確認できましたね。
また、コマンドレットの構文を見てみるとわかるように、実行ポリシーには ”Scope(スコープ)” があり、設定する対象がいくつか存在します。
試しに ”-List” オプションを付与して実行してみましょう。
PS C:\> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Undefined
実行ポリシーがデフォルトの状態のとき、どのスコープも Undefined(未定義)であることが分かります。
それぞれのスコープの意味はこのようになっています。
- MachinePolicy -> マシングループポリシー
- UserPolicy -> ユーザグループポリシー
- Process -> 実行中のPowerShellプロセス内
- CurrentUser -> 現在のユーザ
- LocalMachine -> 全てのユーザ
”Scope” オプションを付与することで、特定のスコープに対する実行ポリシーの情報を参照することが可能です。
PS C:\> Get-ExecutionPolicy -Scope CurrentUser Undefined
ちなみに、実行ポリシー規定値は ”Ristricted”(Windows Server 2012 R2 以外)ですので Undefined(未定義)の場合は、”Ristricted” が適用されています。
まとめ
スクリプト実行エラーが、実行ポリシーに起因するものであるかどうかを確認できるコマンドレットは
Get-ExecutionPolicy
である。
実行結果が ”Restricted” なら、スクリプト実行が制限されている。
[…] Get-ExecutionPolicy – PowerShell で実行ポリシーを確認する方法 | チェシャわら […]
[…] https://cheshire-wara.com/powershell/ps-cmdlets/sequrity/get-executionpolicy/ […]