cheshire-boy

セキュリティ

【Set-ExecutionPolicy】PowerShellで実行ポリシーを変更する方法

投稿日:2016年10月5日 更新日:

こんにちは。チェシャ男です。(-皿-)

今回は、

【 PowerShell スクリプトの実行ポリシー変更方法】

について紹介します。

PowerShell 入門者がスクリプト作成時に「実行できない」問題に直面した場合には本記事を参考に実行ポリシーを変更しましょう。

スクリプトファイルが実行できない原因を確認するための実行ポリシー確認方法はこちら↓の記事をご参考ください。

 

スポンサーリンク

 Set-ExecutionPolicy で実行ポリシーの変更

スクリプトファイルの実行ポリシーを変更するコマンドレットに、

Set-ExecutionPolicy

といものがあります。

【コマンドレット】

Set-ExecutionPolicy

【オプション】

-ExecutionPolicy <実行ポリシー>
-Scope     <設定範囲のスコープ>
-Force
-WhatIf
-Confirm

【入力】

Microsoft.PowerShell.ExecutionPolicy
Microsoft.PowerShell.ExecutionPolicyScope

【出力】

System.Object

【エイリアス】

なし

Set-ExecutionPolicy の実行

早速、実行してみましょう。

なお、実行ポリシーに設定できる値は以下の表をご覧ください。

実行ポリシー 内容 ローカル リモート
Restricted  全てのスクリプトが制限(Restrict)される。 × ×
AllSigned  全て(All )の署名付き(Signed)スクリプトのみ実行可能。
署名がないものは実行禁止。

(※署名付のみ可)

(※署名付のみ可)
RemoteSigned  ローカルのファイルは実行可能。
インターネットからダウンロードした外部のスクリプト(Remote)は署名(Signed)が必要。

(※署名付のみ可)
Unrestricted 全てのスクリプトが制限なし(Unrestrict)。
ただし、インターネットからダウンロードしたファイルは実行時、確認される。

(※確認あり)
Bypass 警告や確認なしに、すべてのファイルが実行可能。

今回は ”RemoteSigned” に設定しローカルスクリプトの実行を許可します。

Set-ExecutionPolicy コマンドレット実行中の選択肢は「[Y] はい(Y)」を指定してください。

おっと。

なにやらエラーが発生しましたね。

15行目を見てみると、

”PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException”

とありますね。

PermissionDenied(アクセス拒否)や UnauthorizedAccessException(許可されていないアクセスエラー)と出ているようです。エラーについて解決策を考えてみましょう。

レジストリを参照しエラーの原因を探る

まず、実行結果の8行目を見てみましょう。

"レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。"

なにやらレジストリを参照していることが分かりますね。 実際にレジストリを確認してみましょう。

今回はエラー文を参考に、

  • キー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
  • データ:ExecutionPolicy

を参照するため ”Get-ItemPropertyValue” コマンドレットを使用します。

"-Path" オプションに上記のキー、”‐Name” オプションにデータを指定して下さい。

確かに、今回使用した ”Set-ExecutionPolicy” コマンドレットは HKLM ドライブのレジストリを参照し変更しようとしています。

実行ポリシーの値が ”Restricted” であることも確認できますね。

また、実行結果の9行目を見てみると、

"既定 (LocalMachine) のスコープの実行ポリシーを変更するには、[管理者として実行] オプションを使用して Windows PowerShell を起動してください。"

とあるように LocalMachine(全てのユーザ)スコープがデフォルトの設定先になっています。

→実行ポリシーのスコープについては、実行ポリシーの確認をご覧ください。

先ほどのエラー文の後半、

"[管理者として実行] オプションを使用して Windows PowerShell を起動してください。"

とあるように、今回のエラーの原因は全ユーザに対してレジストリを変更し実行ポリシーを設定しようとしたために発生した「権限不足のエラー」だったことが分かります。

管理者権限で実行ポリシーを設定する

先ほど権限不足のエラーであった事が判明したので、今度は PowerShell を[管理者として実行する]から起動し、”Set-ExecutionPolicy” を実行してみましょう。

管理者として実行-チェシャわら
管理者として実行-チェシャわら

上図のように PowerShell を、[管理者として実行]から起動します。

起動した PowerShell 画面に、「管理者」と記載があれば管理者として起動が成功しました。(※下図参照)

管理者実行のPowershell-チェシャわら
管理者実行のPowershell-チェシャわら

それでは、改めて実行ポリシーを ”RemoteSigned” に設定しローカルスクリプトの実行を許可しましょう。

今度は、成功したようですね。特にエラーは出ませんでした。

実行結果の表示が無かったので、念のため実行ポリシーの値を取得して確認してみましょう。

問題ありませんね。

レジストリから確認しても、Get-ExecutionPolicy コマンドレットで確認しても ”RemoteSigned” が表示されますよ!

ちなみに、全ユーザに対して実行ポリシーを適用したくない時もあるかと思います。現在のユーザに対してのみ実行ポリシーを変更したい場合はこちら↓の記事をご覧ください!

スクリプトが実行できるかチェックする

無事、実行ポリシーが変更できたのでスクリプトを実行してみましょう。

使用するスクリプトを下に載せておきます。

たった1行ですが、”test.ps1” と名前を付けたスクリプトファイルを使用します。

"I am Cheshire Boy" と表示されれば成功ですね。

ちなみに、PowerShell スクリプトは、誤操作の防止やセキュリティ向上のためダブルクリックでは実行されません。 メモ帳で開かれるだけです。(笑)

成功しましたね。

これであなたの PC でもスクリプトが実行できるようになりました。

ちなみに、この方法はローカルマシンのレジストリに書き込むため、1度設定してしまえば他のユーザでも実行可能になっています。

また、再起動しても実行ポリシーは変更されません。

まとめ

実行ポリシーによって、スクリプト実行エラーが発生する場合は、

Set-ExecutionPolicy <実行できるポリシー>

で変更する。

設定できる実行ユーザは、

  • Restricted
  • AllSigned
  • RemoteSigned
  • Unrestricted
  • Bypass
  • (Undefined)

既定のスコープは、LocalMachine(全てのユーザ)なので1度設定すれば、以降は設定不要

スポンサーリンク

-セキュリティ
-, , , ,

Copyright© 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- , 2017 AllRights Reserved Powered by micata2.