書けたら書く

主にCorporate ITについて書けたら書く

PowerShellのExecution Policy設定

PowerShellスクリプトを実行すると以下のようなエラーが表示される場合があります。

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

.ps1ファイルの実行は、PowerShellの「実行ポリシー (Execution Policy)」で制御されています。上記のエラーは実行ポリシーが適切でないために表示されます。

現在のExecution Policyは以下のコマンドレットを実行すると確認できます。

PS C:\> Get-ExecutionPolicy
Restricted

ポリシーにはいくつか種類があります。詳しくはMicrosoft公式を参照してください。

今回は RemoteSigned に変更します(PowerShellスクリプトの実行時に引数として Execution Policy を指定する方法もありますが、面倒なので…)
そうすることで以下の状態となります。

  • ローカルに保存されているスクリプトが実行可能となる。
  • インターネットからダウンロードしたスクリプトは、署名されているもののみが実行可能となる。

PowerShellを「管理者として実行」し、以下の通りにコマンドレットを実行します。

PS C:\> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"):