PowerShellスクリプトが実行されないのはなぜですか?


103

簡単なバッチファイルをPowerShellスクリプトとして記述したところ、実行時にエラーが発生しました。

それは私のパスのスクリプトディレクトリにあります。これは私が得るエラーです:

このシステムではスクリプトの実行が無効になっているため、ロードできません。「get-help about-signing」をご覧ください。

ヘルプを調べましたが、役に立ちませんでした。

回答:


102

これは、PowerShellのデフォルトのセキュリティレベルである可能性があり、(IIRC)は署名されたスクリプトのみを実行します。

これを入力してみてください:

set-executionpolicy remotesigned

これにより、PowerShellにローカル(つまり、ローカルドライブ上)の署名されていないスクリプトの実行を許可するように指示します。

次に、スクリプトを再度実行してください。


5
少なくともWindows 8では、管理者権限でPowershellを実行する必要があります。
ComFreek 2012

1
また、Windows 7でも管理者権限でPowerShellスクリプトを実行する必要があります。
ロッド

14
これはかなり恐ろしい答えです。1つは、Powershellのデフォルトのセキュリティレベルを望ましくない(そして安全でない)方法で永久に変更することです。もう1つは、署名されたリモートスクリプトと署名されていないローカルスクリプト(Chocolateyが時々必要とする署名されていないリモートスクリプトではない)に実行権限が付与されることを十分に説明できていません。ほとんどのユーザーはおそらくこれこれを代わりにしたいと思うでしょう。
2016

1
答えのいくつかの弱点に対するセシルの懸念は公平ですが、いくつか指摘したいと思います。1)彼の2つのリンクは、私には同じページを開くように見えます。2)スクリプトを単純に実行する場合、実行ポリシーの設定はおそらくまだ先であり、OPとは関係がない可能性があります。3)起動スクリプトに最適なポリシーであると思われ、コマンドラインで実行ポリシーとスコープを指定しますスクリプトを実行し、ログオンのために必要に応じてセッション構成を設定します。Windowsセッション中に高いセキュリティが必要であるが、ログオンのために削減したい場合は、スクリプトの順序に微妙な違いを与えたいと思うでしょう。
omJohn8372 2017

ワンショットの場合、実行中のPowerShellインスタンスの一時的な例外を定義するAnkurの回答が以下で最も役立ちます。
Florenz Kley

79

実行する必要がありますSet-ExecutionPolicy

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

3
Windowsが新規インストールに設定するデフォルトのExecutionPolicy値は何ですか?
マシューロック

5
@MatthewLock Restrictedがデフォルトのポリシーです。続きを読む
Nadeem_MK 2017年

24

使用する:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

現在のセッションでPowerShellを実行できるようにするには、常に上記のコマンドを使用してください。


this + superuser.com /questions/612409/…+ shorcut link = perfection
Q20

16

次のようにPowerShellを呼び出すことで、このエラーを回避できました。

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

つまり、 -executionpolicy bypass、スクリプトを呼び出す方法に。

これはWindows 7 Service Pack 1で機能しました。PowerShellを初めて使用するため、知らないうちに警告が出る可能性があります。

[編集2017-06-26]私はこの手法をWindows 10やWindows 2012 R2を含む他のシステムで問題なく使用し続けました。

これが私が今使っているものです。これにより、スクリプトをクリックしてスクリプトを誤って実行することがなくなります。これをスケジューラーで実行するときに、「scheduler」という1つの引数を追加すると、プロンプトがバイパスされます。

これにより、最後にウィンドウが一時停止されるため、PowerShellの出力を表示できます。

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%


コマンドSet-ExecutionPolicy bypass -File C:\ Users \ david \ Desktop \ test.ps1を実行しようとすると、エラーメッセージが表示されました。このコマンドには-Fileオプションはありません。
David Spector

ああなるほど。コマンドpowershell -executionpolicy bypass -File C:\ Users \ david \ Desktop \ test.ps1を含むショートカットを作成する必要があります。安全なグローバルコマンドSet-ExecutionPolicy Restrictedが指定されている場合でも、コマンドtest.ps1が実行されます。この基本情報がお役に立てば幸いです。
David Spector

5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

上記のコマンドは、次のエラーが発生した場合でも機能しました。

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.


1

このコマンドset-executionpolicy unrestrictedを使用すると、作成したすべてのスクリプトをログインユーザーとして実行できます。set-executionpolicy signedログアウトする前に、コマンドを使用して実行ポリシー設定を署名済みに戻すようにしてください。


set-executionpolicy signedCannot bind parameter 'ExecutionPolicy'などを与える
JinSnow

0

Windows 10の場合:myfile.ps1のセキュリティプロパティの変更をクリックし、myfile.ps1の/プロパティを右クリックして[アクセスを許可]を変更します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.