2014年7月13日日曜日

PowerShell を実行すると「スクリプトの実行がシステムで無効になっている」エラー

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

デフォルトでは実行ポリシーが無効になっており、第一歩からくじけそうです。
ポリシーを変更する必要があります。変更するには「管理者権限」が必要です。この管理者とは管理者ユーザー(Administratorアカウント)を指すのではなく、UAC の管理者特権を意味します。Windows PowerShell を起動する時に右クリックして「管理者として実行」を選択することで解決できます。

ポリシーの変更コマンド
PS> Set-ExecutionPolicy RemoteSigned

PowerShell 実行ポリシーの一覧
  • Restricted (デフォルトの設定)
    実行できるスクリプトはありません。Windows PowerShell は対話型モードでのみ使用できます。
  • AllSigned
    信頼できる発行元が署名したスクリプトのみを実行できます。
  • RemoteSigned (作成したスクリプトを実行するならば、このポリシーを選びます)
    ダウンロードしたスクリプトは信頼できる発行元が署名した場合にのみ実行できます。
  • Unrestricted
    制限なし。すべての Windows PowerShell スクリプトを実行できます。


管理者特権が無いと、このようなエラーとなります。
Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。
発生場所 行:1 文字:20
+ Set-ExecutionPolicy <<<<  Restricted
    + CategoryInfo          : NotSpecified: (:) [Set-ExecutionPolicy]、UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

関連する資料のリンク

Set-ExecutionPolicy コマンドレットの使用
http://technet.microsoft.com/ja-jp/library/ee176961.aspx