PowerShellで実行ポリシーを変更する

PowerShellはWindowsのほぼすべての機能を操作できる強力なCUIであるため、デフォルトの設定ではスクリプトを実行することができません。簡単なPS1ファイル(Write-Host -Object "test")などを作成して実行すると以下のエラーが表示されます。

PS C:\temp> .\test.ps1
スクリプトの実行がシステムで無効になっているため、ファイル C:\temp\test.ps1 を読み込めません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。
発生場所 行:1 文字:11
+ .\test.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) []、PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

これは実行ポリシーで制限がかかっているために発生しています。ポリシーの種類は以下の通りです。

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

(※署名付のみ可)
RemoteSignedローカルのファイルは実行可能。インターネットからダウンロードした外部のスクリプト(Remote)は署名(Signed)が必要。
(※確認あり)
Unrestricted全てのスクリプトが制限なし(Unrestrict)。ただし、インターネットからダウンロードしたファイルは実行時、確認される。
(※確認あり)
Bypass警告や確認なしに、すべてのファイルが実行可能。

「Get-ExecutionPolicy」コマンドでどの実行ポリシーが設定されているかわかります。

PS C:\temp> Get-ExecutionPolicy
Restricted

Restrictedなのですべてのスクリプトが制限されています。実行ポリシーをRemoteShginedに変更します。

PS C:\temp> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y
PS C:\temp>

正しく変更されたか確認します。

PS C:\temp> Get-ExecutionPolicy
RemoteSigned

再度、PS1ファイルを実行します。

PS C:\temp> .\test.ps1
test

今度は成功しました。

タイトルとURLをコピーしました