top of page
検索

Powershellの実行ポリシー

  • kita56
  • 2024年3月4日
  • 読了時間: 3分

Powershellのスクリプトで困ったことがあったので、紹介します。


発生した問題

Powershellのスクリプトが開発時は問題なく動作していましたが、検証環境でテストを始めるとエラーとなり実行できなくなりました。


原因

開発環境の実行ポリシーは「RemoteSigned(ローカルのスクリプトは実行できますが、リモートからダウンロードしたスクリプは信頼する署名を持つもののみ実行できる)」が設定されていました。

実行ポリシーが「RemoteSigned」の場合、ローカルのファイルは実行可能なので、問題なく実行できていました。

実行ポリシーに意識が向いておらず、検証環境でも開発環境と同じように実行できると思い込んでいました。

検証環境の実行ポリシーには「Restrict(スクリプトの実行はできない)」が設定されていたので、Powershellの実行ポリシーにより、スクリプトの実行がブロックされました。


Powershellの実行ポリシー

Powershellの実行ポリシーには下記の5つがあります。

実行ポリシー

ローカル

リモート

Restrict   

×

×

Allsigned  

署名付きのみ〇

署名付きのみ〇

RemoteSigned

署名付きのみ〇

UnRestrict

〇(警告あり)

ByPass


実行環境の設定変更による実行ポリシーの変更

Powershellのデフォルトの環境の実行ポリシーは、クライアントOSでは「Restrict」、サーバーOSでは「RemoteSigned」が設定されています。

検証環境では「Restrict」が設定されていました。

管理者権限を持っていれば、Set-ExecutionPolicyコマンドレットで実行ポリシーを変更することができます。


起動オプションによる実行ポリシーの変更

管理者権限を持っていなくても、起動オプション"-ExecutionPolicy"で一時的に実行ポリシーを指定して実行することができます。


Unblock-Fileコマンドレットによるブロック解除

管理者権限を持っていなくても、Unblock-Fileコマンドレットで、リモートからダウンロードしたファイルのブロックを解除することができます。

Powershell 3.0以降で使用可能です。


解決策1

起動オプションに"-ExecutionPolicy ByPass"を追加する


解決策2

Unblock-Fileコマンドレットでダウンロードしたスクリプトのブロックを解除する

起動オプションに"-ExecutionPolicy RemoteSigned"を追加する


まとめ

Powershellのスクリプトが開発時は問題なく動作していましたが、検証環境でテストを始めるとエラーとなり実行できなくなりました。

Powershellのスクリプトは、実行ポリシーにより実行の可否が制御されており、使用する際は適切な実行ポリシーを設定する必要があります。

Powershellの実行ポリシーは環境の設定を変更することも可能ですが、起動オプションによる変更の方が、スクリプトの実行後に元の実行ポリシーに戻るため、セキュリティリスクを最小限に抑えることができ、安全です。

解決策1は起動オプションを指定するだけでお手軽ですが、その実行中にすべてのスクリプトの実行が許可されてしまうため、セキュリティリスクがやや高くなります。

解決策2は誤ってリモートからダウンロードしたスクリプトを起動してしまっても実行できないので、セキュリティリスクが低く、お勧めです。

【補足】ローカルで作成したスクリプトを頻繁にテストする開発環境では、実行ポリシーを「RemoteSigned」にすることで、セキュリティと利便性のバランスをとることも選択肢になると思います。

 
 
 

Comments


  • Facebook

©Optarc,llc.

bottom of page