web-dev-qa-db-ja.com

PowerShellスクリプトの実行を有効にする方法

PowerShellスクリプトを実行しようとすると、このエラーが発生します。

このシステムではスクリプトの実行が無効になっているため、ファイルC:\ Common\Scripts\hello.ps1をロードできません。詳しくは "get-help about_signing"をご覧ください。
行:1文字:13
+。\ hello.ps1 <<<<
+ CategoryInfo:NotSpecified:(:) []、PSSecurityException
+ FullyQualifiedErrorId:RuntimeException

237
Pavel Chuchuva
  1. [管理者として実行]オプションを使用してWindows PowerShellを起動します。実行ポリシーを変更できるのは、コンピュータ上のAdministratorsグループのメンバだけです。

  2. 次のように入力して、未署名のスクリプトの実行を有効にします。

    set-executionpolicy remotesigned
    

これにより、ローカルコンピュータで作成した署名なしのスクリプトとインターネットから署名したスクリプトを実行できます。

Microsoft TechNetライブラリの スクリプトの実行 も参照してください。

365
Pavel Chuchuva

Default Execution Policyは制限付きに設定されています。次のように入力して確認できます。

Get-ExecutionPolicy

無制限モードにするには、次のように入力する必要があります。

Set-ExecutionPolicy unrestricted

お役に立てれば

70
William Hilsum

私がスクリプトを開発するために使用している私のマシンでは、上記のように-unrestrictedを使用します。私のスクリプトをエンドユーザーのマシンにデプロイする場合は、-executionpolicyスイッチを付けてpowershellを呼び出します。

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
59
MDMoore313

以下のコマンドで現在のExecutionPolicyのステータスを取得できます。

Get-ExecutionPolicy;

デフォルトでは制限付きです。 PowerShellスクリプトの実行を許可するには、このExecutionPolicyをBypassまたはUnrestrictedとして設定する必要があります。

以下のPowerShellコマンドを使用して、現在のユーザーのポリシーをBypassまたはUnrestrictedに設定できます。

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

制限なしポリシーはすべての構成ファイルをロードし、すべてのスクリプトを実行します。インターネットからダウンロードした未署名のスクリプトを実行すると、実行前に許可を求められます。

バイパスポリシーでは、何もブロックされず、スクリプトの実行中に警告やプロンプトは表示されません。 ExecutionPolicyのバイパスは、制限なしより緩和されています。

14
Pratik Patil

Windowsのバージョンと設定によっては、Unrestrictedモードであっても、次のような警告が表示される場合があります。

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D")

解決策は、 "bypass"ポリシーを使用することです。これは、次のコマンドで有効にします。

Set-ExecutionPolicy Bypass

のドキュメントから

バイパス:何もブロックされず、警告やプロンプトも表示されません。

これは明らかに安全ではありません。関連するリスクを理解してください。

4
Benoit Blanchon

以下の登録キー
Windowsレジストリエディタバージョン5.00

[HKEY_LOCAL_MACHINE \ソフトウェア\ポリシー\ Microsoft\Windows\PowerShell] "EnableScripts" = dword:00000001 "ExecutionPolicy" = "バイパス"

そして:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

確かにうまくいきます。

2

何らかの理由で、PowerShellコマンドレットは、ローカルユーザーコンテキストに対してのみ、グローバルにローカル実行を有効にしませんでした。たとえば、CygWinのbash Promptの中から自分のユーザーコンテキストで実行されるPowershellスクリプトを起動しようとすると、「デジタル署名されていません」というエラーが表示され、実行されません。答えは、[ローカルグループポリシーエディタ] - > [ローカルコンピュータポリシー] - > [管理用テンプレート] - > [Windowsコンポーネント] - > [Windows PowerShell]の順にクリックし、[スクリプト実行を有効にする]をダブルクリックすることです。これを「有効」に変更してから「ローカルスクリプトとリモート署名付きスクリプトを許可する」の実行ポリシーを変更し、ユーザーコンテキストに関係なくグローバルに機能させるようにします。

1
Eric Green

受け入れられた答えは正しいですが、ポリシーの修正は、現在実行中のPowershellのインスタンスに対してのみ利用可能です。つまり、Powershellのインスタンスがいったんシャットダウンされると、そのことができます。ポリシーがリセットされます。ユーザーがPowershellの別のインスタンスを再度開くと、デフォルトポリシーのRestrictedが適用されます。

私にとっては、物事を構築するためにVisualStudio Codeコンソールとcygwinのg ++​​を使用する必要があります。コンソールはPowershellを使用しています。デフォルトのポリシーでは、なにもできません。 1つの解決策は、コンソールがVisualStudio Codeコンソールで起動されるたびにポリシーを変更することです。おそらく、ポリシーを変更するスクリプトです。

怠け者なので、Powershellを管理者モードで実行したときの解決策もあります。これは、受け入れられている答えと同じです。ただし、レジストリテーブルの値を変更する追加のパラメータを使用します。それが終わったら。 Powershellの他のインスタンスはデフォルトでRemoteSignedポリシーを使います。

set-executionpolicy remotesigned -Scope CurrentUser

0
r0ng

ポリシーを(正しく)設定するのが最善の選択ですが、私の管理対象システムでは、そのポリシーを変更することはできません。

私にとって、ポリシーを変更する最も簡単な回避策は、 "PowerShell ISE"でスクリプトを開き、コードをハイライトすることです(または実行するには、コードの一部)をクリックしてから[Run Selection]ボタンをクリックします(またはF8ショートカットを使用します)

これは最善の解決策ではなく、タスクの自動化にはほとんど役立ちませんが、IS部門の一部を実行しないでPowerShellを使用することができます。

0
DBADon