Windows PowerShell 開発

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

2017年1月23日

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

PS E:powershell> .test
.test : このシステムではスクリプトの実行が無効になっているため、ファイル E:powershelltest.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:powershelltest.ps1 を読み込めません。ファイル E:powershelltest.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

-Windows, PowerShell, 開発
-, ,