PowerShellスクリプトの実行を有効にするには?
PowerShellスクリプトを実行しようとすると、こんなエラーが出ます。詳しくは「get-help about_signing」をご覧下さい。
At line:1 char:13 + .\hello.ps1 ≪<<<< + CategoryInfo : NotSpecified. (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException
PowerShellスクリプトを実行しようとすると、こんなエラーが出ます。詳しくは「get-help about_signing」をご覧下さい。
At line:1 char:13 + .\hello.ps1 ≪<<<< + CategoryInfo : NotSpecified. (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException
デフォルトの実行ポリシーは制限付きに設定されていますが、次のように入力して確認することができます:
Get-ExecutionPolicy
あなたはそれが制限なしモードに行くようにするには、次のように入力する必要があります:
Set-ExecutionPolicy unrestricted
このヘルプを希望します。
スクリプトの開発に使用しているマシンでは、上記のように -unrestricted を使用します。しかし、自分のスクリプトをエンドユーザーのマシンにデプロイする場合は、次のように -executionpolicy スイッチを指定して powershell を呼び出します。
私たちは、以下のコマンドで現在のExecutionPolicyの状態を取得することができます。
Get-ExecutionPolicy;
既定では Restricted となっています。PowerShell スクリプトの実行を許可するには、この実行ポリシーを Bypass または Unrestricted のいずれかに設定する必要があります。
以下の PowerShell コマンドのいずれかを使用して、現在のユーザーのポリシーを Bypass
または Unrestricted
として設定することができます。インターネットからダウンロードした符号なしスクリプトを実行すると、実行前に許可を求めるプロンプトが表示されます。Bypass ExecutionPolicy は、無制限よりもリラックスしています。
Windows のバージョンや設定によっては、Unrestricted
モードでも以下のような警告が表示される場合があります。何もブロックされず、警告やプロンプトもありません。
これは明らかに安全ではありませんので、リスクを理解してください。
A reg key with: Windows Registry Editor Version 5.00
[HKEY
何らかの理由で、PowerShell cmdlet はグローバルにローカル実行を有効にしていませんでした。例えば、CygWinのbashプロンプトの中からPowershellスクリプトを起動しようとしても、それは実行されず、"is not digitalally signed “というエラーが出る。答えは、Local Group Policy Editor -> Local Computer Policy -> Administrative Templates -> Windows Components -> Windows PowerShellに入って、'Turn on Script Execution'をダブルクリックすることだった。これで、「Enabled」に変更して、「Allow local scripts and remote signed scripts」の実行ポリシーに変更して、ユーザのコンテキストに関係なくグローバルに動作するようにしました。
受け入れられた答えは正しいのですが、ポリシーの変更は現在実行中の Powershell インスタンスに対してのみ有効です。ポリシーはリセットされます。ユーザーが別の Powershell インスタンスを再度開いた場合、デフォルトのポリシーが適用されます。 私の場合、VisualStudio Code コンソールと cygwin の g++ を使用してビルドする必要があります。コンソールはPowershellを使用していますが、デフォルトのポリシーでは何もできません。解決策としては、VisualStudio Code コンソールでコンソールを起動するたびにポリシーを変更することです。
怠け者なので、もう一つの解決策としては、管理者モードで Powershell を実行することです。一度それが行われました。Powershell の他のインスタンスはデフォルトで Restricted
ポリシーを使用します。