PowerShellでスクリプトが無効になっている時にやることはコレ!

PowerShellでスクリプトが無効になっている時にやることはコレ!

PowerShellでスクリプトを実行しようとした時にエラーを吐かれた。

それが下のこれ。

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

エラーの原因

原因はポリシーだった。

PowerShellスクリプト実行ポリシーというのがあって、これによって実行が制限されていた。

このポリシーを変更してやることで解消した。

ポリシーの確認

まずは、現在のポリシーの確認を行おう。

ポリシーを確認するにはPowerShellコンソールで下記のコマンドレットを実行してみよう。

PS C:\dev> Get-ExecutionPolicy

大体はRestrictedになってるだろう。

この権限と他のポリシーの種類を紹介する。

実行ポリシー説明安全性(個人的見解)
Restricted個別のコマンドは許可しますが、スクリプトは実行できません。(Windows Server 2012 R2 を除く全てのバージョンでのデフォルトになります。)高但しスクリプトは動作しません。
AllSignedスクリプトは実行できますが、デジタル署名が付いてなければなりません。(そのスクリプトをローカル PC で書いても同じです。)未署名のスクリプトを実行すると、実行を許可するか拒否するか確認ダイアログが表示されます。(ユーザーが許可を選べば実行します。)
RemoteSignedスクリプトは実行できますが、以下の条件下になります。インターネットからダウンロードしたスクリプト或いはコンフィグファイル、メールの添付ファイルに含まれているものも含めてデジタル署名が付いていなければなりません。(或いは、ユーザーがUnblock-File コマンド、またはファイルのプロパティからファイルのブロックを解除していなければなりません。)ローカルコンピューターで書かれたスクリプトは実行できます。(Windows Server 2012 R2 のデフォルトになります。)
Unrestricted未署名のスクリプトでも実行できます。インターネットからダウンロードしたファイルがブロック解除されていなければ、実行時に警告が表示されます。(ユーザーが実行を許可すれば実行できます。)
Bypass警告やユーザーへの確認なしに、全てのスクリプトが実行ができます。

ポリシーの変更

現在のポリシーと、変更したいポリシーの種類の確認ができたら実際に変更をしてみよう。

PS C:\dev> Set-ExecutionPolicy Bypass

これでポリシーの変更ができる。

意外とかんたんに出来るので必要であればやってみよう。

PowerShellカテゴリの最新記事