かえでBlog

色々なことを徒然と……

【PowerShell】外部ファイル実行時にポリシーエラーが発生する際の対処方法

   

PowerShellを外部ファイルから実行するとセキュリティエラーが発生しました。

PS E:\powershell> .\test
.\test : このシステムではスクリプトの実行が無効になっているため、ファイル E:\powershell\test.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\test
+ ~~~~~~
   + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
   + FullyQualifiedErrorId : UnauthorizedAccess

PowerShellはデフォルトで外部ファイルでのスクリプト実行を許可していない為に発生するようです。

対処方法

PowerShellのポリシー確認方法

PowerShellを起動します。

Get-ExecutionPolicyで現在のPowerShellの確認を行います。

ポリシーは以下の通りです。

  個別 スクリプト
(ローカル)
スクリプト
(ネットワーク)
備考
Restricted × ×

外部ファイルの実行不可。
Windows Server 2012 R2以外で既定

AllSigned ディジタル証明書で署名されたファイルのみ実行可能。
RemoteSigned インターネットからダウンロードしたファイルのみディジタル証明書で署名されていないと実行不可。(ローカルで作成したファイルは署名なしでも実行可能)
Windows Server 2012 R2で既定
Unrestricted インターネットからダウンロードしたファイルを実行する場合、警告が表示される。
Bypass 警告が一切でない状態で実行される
Undefined 何も設定されていない状態(規定値と同じ扱い)

◎…警告表示せずに実行
〇…警告ありで実行
△…信頼されたディジタル証明書で署名されたもののみ実行
×…実行不可
?…不明

PowerShellのポリシー変更方法

PowerShellを管理者権限で起動します。

Set-ExecutionPolicy 【実行ポリシー】で設定したいポリシーに変更できます。
ポリシー一覧はPowerShellのポリシー確認方法を参照してくさい。

下記設定はRemoteSignedに設定しています。

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?

↑の警告が表示されたらYまたはAを押下して実行します。

適用後、Get-ExecutionPolicyにて変更されていることを確認します。

変更後

外部ファイル実行できるポリシーに変更後、外部ファイルでの実行が行えるようになります。

 

署名ありのみ外部ファイル実行可能のポリシーにした場合で署名されていないファイルを実行した場合はエラーが発生します。

.\test.ps1 : ファイル E:\powershell\test.ps1 を読み込めません。ファイル E:\powershell\test.ps1 はデジタル署名されていま
せん。このスクリプトは現在のシステムでは実行できません。スクリプトの実行および実行ポリシーの設定の詳細については、「abo
ut_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

上記エラー発生した場合、ファイルにディジタル証明書を付与するかポリシーの変更が必要になります。

最後に

Windows10でPowerShellがさらに使いやすくなり、デフォルトシェルをコマンドプロンプトからPowerShellに変更しようとする動きがあるみたいです。 (すでにWindows 10 Insider Build 14971から試験的に導入しているみたい。)

PowerShell使ってみると便利だけど使いこなすのには色々覚えていかないと。

Windows10だけかもですが、CTRL+Cでコピー、CTRL+Vで貼り付け、CTRL+Lでリフレッシュできるのは結構便利ですね。

参考サイト

about_Execution_Policies:https://technet.microsoft.com/ja-JP/library/hh847748.aspx

 - 開発, PowerShell, Windows , ,