PowerShellは、「このシステムではスクリプトの実行が無効になっている」と述べています。


1761

私は実行しようとしています を呼び出すファイル からスクリプトを実行cmd.exeすると、次のエラーが発生します。

Management_Install.ps1 このシステムではスクリプトの実行が無効になっているため、ロードできません。

私は走った

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

そして、私がGet-ExecutionPolicyから実行するときUnrestricted戻ってきます。

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1

WARNING: Running x86 PowerShell...

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1このシステムではスクリプトの実行が無効になっているため、ファイルをロードできません。詳細については、「get-help about_signing」を参照してください。

行:1文字:25

  • .\Management_Install.ps1 <<<< 1

    • CategoryInfo:NotSpecified:(:) []、PSSecurityException

    • FullyQualifiedErrorId:RuntimeException

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSE

Press any key to continue . . .

システムはWindows Server 2008R2です。

何が悪いのですか?


3
私は管理者としてログインしていません。管理者としてログインし、「管理者」として実行し、上記と同じ結果を得ました...
Conor

2
一番下まで来て、エラーは誤解を招くものでした、問題は私のpowershellスクリプトにありました、ありがとう!
Conor 2010年

実行ポリシーにはいくつかのスコープがあり、PowerShellをさまざまな方法で実行すると、さまざまなポリシーを取得できることを指摘しておく価値はあります。ポリシーのリストを表示するには、を実行しGet-ExecutionPolicy -Listます。
ベーコンビット

回答:


2240

Windows Server 2008 R2 を使用している場合は、x64およびx86バージョンのPowerShellがあり、どちらにも実行ポリシーを設定する必要があります。両方のホストで実行ポリシーを設定しましたか?

管理者、あなたのPowerShellウィンドウにこれを入力して実行ポリシーを設定することができます。

Set-ExecutionPolicy RemoteSigned

詳細については、「Set-ExecutionPolicyコマンドレットの使用参照してください。

完了したら、次のコマンドを使用してポリシーをデフォルト値に戻すことができます。

Set-ExecutionPolicy Restricted

141
Set-ExecutionPolicy Restrictedアクセス許可を元に戻したい場合は、元に戻す方法のようです:technet.microsoft.com/en-us/library/ee176961.aspx。一時的バイパス方式@Jack Edmonds:私には、より安全なルックスpowershell -ExecutionPolicy ByPass -File script.ps1
SharpC

33
より安全なポリシーについては、実際のユーザーにスコープを設定します。Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Nuno Aniceto

Set-ExecutionPolicy RemoteSignedをスクリプトの最初の行にすることはできません。そうである場合は、それを強調表示して、スクリプトの残りの部分を実行する前に、選択したものを最初のみ実行します。
ozzy432836 2017年

私は、SFのサイトで同様の質問に出くわした「SQL Server内PowerShell実行ポリシー」 10月10日'14を尋ねた。答えはそこに含まれるGet-ExecutionPolicy -Listさまざまなスコープを見るために私を助けている。cmdはGet-ExecutionPolicyすべてのスコープを表示しません。 Import-Module SQLPS今で働いています次のようにポリシーが変更されました:{Undefined- Process,MachinePolicy,UserPolicy,}; {RemoteSigned- CurrentUser, LocalMachine}
SherlockSpreadsheets

これを行うと、変更は現在のPowerShellの期間だけ持続しますか?それともそれよりも大きいですか?
ウィリアムジョクシュ

709

-ExecutionPolicy BypassPowerShellの実行時に追加することで、単一のファイルに対してこのポリシーをバイパスできます

powershell -ExecutionPolicy Bypass -File script.ps1

3
これは、管理者以外のアカウントを使用している場合にも非常に便利です。%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPassタスクバーにへのショートカットを作成しました。
zek19

3
Microsoft Technetは「ByPass」ではなく「Bypass」としてスタイルを設定していることに注意してください。参照:technet.microsoft.com/nl-nl/library/hh849812.aspx
Jelle Geerts

1
これは私にとってはうまくいきません、私が普通に呼んだのと同じ許可が拒否されます。type script.ps1 | powershell -ただし、.batからps1を呼び出すことは機能します。
Some_Guy 2017年

8
実行ポリシーの目的は、人々がをダブルクリックして、意図し.ps1ていないものを誤って実行するのを防ぐことです。これは.batファイルで発生します
Kolob Canyon

あなたは私の日を救ってくれてありがとう。
Arpit Patel

163

私は同様の問題を抱えておりcmdWindows Server 2012のデフォルトはx64を実行していると指摘しました。

以下のためのWindows 7Windows 8のWindowsの10Windows Server 2008のR2またはWindows Serverの2012年、として次のコマンドを実行します。管理者

x86(32ビット)
オープンC:\Windows\SysWOW64\cmd.exe
コマンドを実行powershell Set-ExecutionPolicy RemoteSigned

x64(64ビット)
オープンC:\Windows\system32\cmd.exe
コマンドを実行powershell Set-ExecutionPolicy RemoteSigned

あなたはを使用してモードを確認することができます

  • CMDで: echo %PROCESSOR_ARCHITECTURE%
  • Powershellの場合: [Environment]::Is64BitProcess

参照:
MSDN-Windows PowerShell実行ポリシー
Windows-32ビットと64ビットのディレクトリの説明


133

既存の回答のほとんどは方法を説明していますが、理由を説明するものはほとんどありません。そして、インターネットで見知らぬ人からのコード、特にセキュリティ対策を無効にするコードを実行する前に、自分が何をしているかを正確に理解する必要があります。この問題についてもう少し詳しく説明します。

TechNetの「実行ポリシーについて」ページから

Windows PowerShell実行ポリシーを使用すると、Windows PowerShellが構成ファイルを読み込んでスクリプトを実行する条件を決定できます。

PowerShellの基本-実行ポリシーとコード署名で列挙されているように、その利点は次のとおりです。

  • 実行の制御-スクリプトを実行するための信頼レベルを制御します。
  • コマンドハイジャック - コマンドがコマンドに挿入されないようにします。
  • ID-スクリプトは、信頼できる開発者によって作成および署名されているか、信頼できる認証局からの証明書で署名されていますか。
  • 整合性 -マルウェアや悪意のあるユーザーがスクリプトを変更することはできません。

現在の実行ポリシーを確認するには、を実行しGet-ExecutionPolicyます。しかし、変更したいので、おそらくここにいます。

そのためには、Set-ExecutionPolicyコマンドレットを実行します。

実行ポリシーを更新する際には、2つの主要な決定を下す必要があります。

実行ポリシータイプ:

  • Restricted -ローカル、リモート、ダウンロードのいずれのスクリプトもシステムで実行できません。
  • AllSigned -実行されるすべてのスクリプトには、デジタル署名が必要です。
  • RemoteSigned -すべてのリモートスクリプト(UNC)またはダウンロードされたものが署名されている必要があります。
  • Unrestricted -どのタイプのスクリプトにも署名は必要ありません。

新しい変更の範囲

  • LocalMachine -実行ポリシーは、コンピューターのすべてのユーザーに影響します。
  • CurrentUser -実行ポリシーは現在のユーザーにのみ影響します。
  • Process -実行ポリシーは現在のWindows PowerShellプロセスにのみ影響します。

†=デフォルト

たとえば、CurrentUserのみのポリシーをRemoteSignedに変更する場合は、次のコマンドを実行します。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

:実行ポリシーを変更するには、PowerShell As Adminstratorを実行している必要があります。通常モードで実行ポリシーを変更しようとすると、次のエラーが発生します。

レジストリキー 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell'へのアクセスが拒否されました。デフォルト(LocalMachine)スコープの実行ポリシーを変更するには、「管理者として実行」オプションを使用してWindows PowerShellを起動します。

インターネットからダウンロードされていない(または少なくともUNCメタデータが含まれていない)独自のスクリプトの内部制限を強化する場合は、ポリシーに署名されたスクリプトのみを実行するように強制できます。独自のスクリプトに署名するには、PowerShellスクリプトへの署名に関するScott Hanselmanの記事の指示に従ってください。

注意:PSが起動したときに最初に試行するのは、環境を設定するユーザープロファイルスクリプトを実行することなので、Powershellを開くたびにほとんどの人がこのエラーを受け取る可能性があります。

ファイルは通常、次の場所にあります。

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

powershell変数を実行して正確な場所を見つけることができます

$profile

プロファイルに気にすることが何もなく、セキュリティ設定に煩わされたくない場合は、それを削除するだけで、Powershellは実行できないものを見つけることができません。


8
実行ポリシーはセキュリティ対策ですが、ユーザーがPowerShellコードを実行できないようにすることを目的としたものではないことに注意してください。実行ポリシーは、スクリプト保護し、だれがスクリプトを作成、変更、または承認したかを判断することを目的としたものであり、それがすべてです。のような単純なもので実行ポリシー回避するのは簡単Get-Content .\MyFile.ps1 | powershell.exe -NoProfile -です。
ベーコンビット

1
とは-ExecutionPolicy ByPassいえ、その存在を考えると、とにかくこのポリシーの目的は何ですか?ユーザーが誤ってpowershellコンソールを開いて悪意のあるスクリプトを実行するのを防ぐだけですか?攻撃者がこれを回避したい場合、実行可能ファイルまたはバッチスクリプトを使用することはできませんか?@BaconBitsのコメントを読んだ後でも、このポリシーがどのようなシナリオを防ぐことを意図しているのかはよくわかりません...
Ajedi32

2
@ Ajedi32ネットワーク共有でスクリプトを実行するタスクがあるとします。スクリプトを呼び出すときに、スクリプトが署名されていることをプロセスで確認したいと思います。コードで、実行するスクリプトが信頼できるコードであることを再確認します。私のコードを実行できるかどうかは気にしません。それを止めるのがアクセス権の仕事です。私が書いていないコードを実行させないようにしたいだけです。アクセス権とは、ログオン時にオペレーティングシステムがコードを変更できないようにすることです。コード署名と実行ポリシーは、ときに私のスクリプトが変更されていないことを意味、私はそれを実行するために行きます。
ベーコンビット

40

Windows 7の場合:

[スタート]メニューに移動し、「Windows PowerShell ISE」を検索します。

x86バージョンを右クリックし、「管理者として実行」を選択します。

上部に貼り付けSet-ExecutionPolicy RemoteSignedます。スクリプトを実行します。「はい」を選択してください。

Powershell ISEの64ビットバージョン(非x86バージョン)についても、これらの手順を繰り返します。

@Chad Millerがほのめかしたステップを明確にしています。チャドありがとう!


39

また、スクリプトの前にこのコマンドを実行すると、問題も解決します。

set-executionpolicy unrestricted

27
-1-最小限の許可の原則に従います。RemoteSignedセキュリティポリシーのすべての制限を削除する前に、少なくともポリシーをに設定してください。それでも問題が解決しない場合は、問題点とその理由を再評価してください。あなたはunrestricted最後の手段として設定することができますが、それはあなたの出発点ではありません。
KyleMit 2014年

3
このオプションも指摘していただきありがとうございます。生産目的のセキュリティニーズに十分配慮しているため、プロトタイピング能力の迅速な要求が非常に高い時代には、すべてのポリシーとセキュリティが実際に作業の邪魔になります。
tishma

1
プロトタイピングに関するコメントに関しては、これがくだらないコードが本番に入る理由だと思います。もちろん、これは些細な例にすぎませんが、開発中にこの些細なことを解決できない場合は、リリースの心配になります。また、オーダーメイドのコードの場合、および可能であればターゲット環境を知っています-私たちは内部システムの大部分をに設定していRemotesignedます。
Trix

33

管理者ではない環境にいる場合は、自分だけの実行ポリシーを設定でき、管理者は必要ありません。

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

または

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

ヘルプエントリですべてについて読むことができます。

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full

Windows 8ではSet-ExecutionPolicy Unrestricted、管理者が実際に役立つほど「制限を解除」していないように見えたとしても、うまく機能しました。
パトリッジ2014

1
あなたが経験している可能性があるのは、GPOまたは何か他の何かが、ExecutionPolicyの「LocalMachine」レベルの設定を上書きしていることだと思います。Set-ExecutionPolicyコマンドを使用して、ドメインポリシーの設定を上書きすることはできません。ただし、「CurrentUser」レベルのアクセスを設定すると、指定した実行ポリシーが適用されます。これは、コンピューターがLocalMachine設定を確認する前に、実行ポリシーのCurrentUserを確認するためです。
Micah 'Powershell Ninja'

1
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"が私にとって有効な唯一のソリューションです。ありがとう
Paulj

32

RemoteSigned:自分で作成したすべてのスクリプトが実行されます。インターネットからダウンロードしたすべてのスクリプトは、信頼できる発行元によって署名される必要があります。

次のように入力して、ポリシーを変更します。

Set-ExecutionPolicy RemoteSigned

他の投稿で推奨されているとおり、より安全なポリシーのために「-Scope CurrentUser」を含めるのが賢明です。
clusterdude

32

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

Get-ExecutionPolicy;

デフォルトではRestrictedです。PowerShellスクリプトの実行を許可するには、このExecutionPolicyをBypassまたはUnrestrictedのいずれかに設定する必要があります。

現在のユーザーのポリシーは、次のPowerShellコマンドのいずれBypassUnrestrictedを使用して設定できます。

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

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

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

中のに対しバイパスポリシー、何も遮断されていないと、スクリプトの実行中に何の警告やプロンプトはありません。バイパスExecutionPolicyは、よりもリラックスしていUnrestrictedます。


4
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force; 別名VS2015に文句を言うのをやめて私の血まみれのスクリプトを実行するように指示するための迅速で汚い方法。ありがとう。命の恩人。
2016

1
コマンドの末尾のセミコロンは不要です。
Bill_Stewart

23

Windows 10を使用していて、コマンドを実行できませんでした。私にいくつかの手がかりを与えた唯一のコマンドはこれでした:

[x64]

  1. C:\ Windows \ SysWOW64 \ cmd.exeを開きます[管理者として]
  2. コマンドを実行> powershell Set-ExecutionPolicy Unrestricted

しかし、これはうまくいきませんでした。限られていた。おそらくWindows10の新しいセキュリティポリシー。私はこのエラーがありました:

Set-ExecutionPolicy:Windows PowerShellは実行ポリシーを正常に更新しましたが、設定はより具体的なスコープで定義されたポリシーによって上書きされます。オーバーライドにより、シェルは現在の有効な実行ポリシーを保持します...

だから私は別の方法(解決策)を見つけました:

  1. 実行コマンド/コンソールを開く(Win+ R
  2. タイプ:gpedit.mscグループポリシーエディター)
  3. ブラウズにローカルコンピュータポリシー ] - > [ コンピュータの構成] - > [ 管理用テンプレート] - > [ Windowsコンポーネント ] - > [ Windows PowerShellの
  4. 「有効にスクリプトの実行を有効にします
  5. 必要に応じてポリシーを設定します。私は「すべてのスクリプトを許可する」に設定しました。

PowerShellを開いて、お楽しみください;)


これはスタンドアロンインストールですか、それともワークグループまたはドメインに接続していますか?
MEMark

なぜcmdを開いてそれを行うのですか?ISEを(管理者として)開いて入力Set-ExecutionPolicy RemoteSigned
Kolob Canyon

OMGはこれでようやく私のwin10ボックスを修正しました。@ kolob set-executionpolicyでは十分ではありません
xer0x

は使用しないでくださいUnrestricted。使用することをおRemoteSigned
勧め

@ xer0xは、管理者としてpowershellを実行している限り続く必要があります
Canyon

10

実行ポリシーの設定は環境固有です。実行中のx86 ISEからスクリプトを実行しようとしている場合は、x86 PowerShellを使用して実行ポリシーを設定する必要があります。同様に、64ビットISEを実行している場合は、64ビットPowerShellでポリシーを設定する必要があります。


10

Win+ Rコピーペーストコマンドを入力して、を押しOKます

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

そして、スクリプトを実行します。

次に、変更を元に戻します:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"

10

次のコマンドを使用してこれをバイパスすることもできます。

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

また、Scott Sutherlandによるこの記事Set-ExecutionPolicyは、管理者権限がない場合にPowerShellをバイパスする15の方法について説明しています。

PowerShell実行ポリシーをバイパスする15の方法


これはおそらく、この制限をトラブルシューティングして理解するための最も説得力のあるガイドの1つです。
Osvaldo Mercado

5
  1. 管理者としてPowerShellを開き、Set-ExecutionPolicy -Scope CurrentUserを実行します。
  2. 提供RemoteSignedを入力し、Enterキーを押します
  3. ファイル名を指定して実行のSet-ExecutionPolicy -ScopeあるCurrentUser
  4. 提供無制限にして、Enterキーを押します


3

PowerShell ISEエディターで、次の行を実行するとスクリプトが最初に許可されることがわかりました。

Set-ExecutionPolicy RemoteSigned -Scope Process

2

PowerShell 2.0では、実行ポリシーはデフォルトで無効に設定されていました。

それ以降、PowerShellチームは多くの改善を行い、スクリプトの実行中にユーザーが物事をあまり壊さないと確信しています。したがって、PowerShell 4.0以降では、デフォルトで有効になっています。

あなたのケースでSet-ExecutionPolicy RemoteSignedは、PowerShellコンソールから入力して「はい」と答えます。


2

今日も同じ問題がありました。64ビット実行ポリシーは無制限でしたが、32ビットは制限されていました。

32ビットポリシーのみをリモートで変更する方法は次のとおりです。

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}

2

レジストリパスに移動し、にHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell設定ExecutionPolicyRemoteSignedます。


1
1.管理者としてPowerShellと実行のSet-ExecutionPolicy -ScopeあるCurrentUserが 提供2. RemoteSignedをキーを押します。3.入力のSet-ExecutionPolicy -ScopeあるCurrentUserが 提供4. 無制限にして、Enterキーを押します
Ramanujam・アラム

2

実行しようとすると、別の警告が表示されます Set-ExecutionPolicy RemoteSigned

私はこのコマンドで解決しました

Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$false

Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false

1

RubyまたはChefで実行し、 ``システム実行を使用するためにここにいる場合は、次のように実行します。

`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`

このコマンドは、「MyDocuments」フォルダを取得するためのものです。

-ExecutionPolicy Unrestricted トリックを行います。

それが他の誰かの役に立つことを願っています。


囲んでいる ``は本当にそこにあるべきですか?
Peter Mortensen

1

いくつかの回答が実行ポリシーを示しています。ただし、「runas管理者」も必要なものがあります。これは、実行ポリシーに永続的な変更がなく、管理者の制限を超えることができるという点で最も安全です。schedtaskと一緒に使用して、次のものでバッチを開始します。

    runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

上記のJack Edmondsと投稿のPeter Mortensen / Dhanaの両方からコマンドプロンプトから「管理者として実行」としてアプリケーションを実行する方法は?


1

この行は、Windows Server 2008 R2サーバーの1つに最適であることがわかりました。他の2人は、PowerShellスクリプトにこの行がないと問題はありませんでした。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process


0

あなたはそれを迂回する特別な方法を使うことができます:

Get-Content "PS1scriptfullpath.ps1" | Powershell-NoProfile -

powershellスクリプトの内容をpowershell.exeにパイプし、実行ポリシーをバイパスして実行します。


0

これは私の問題を解決しました

Windows PowerShellコマンドを開き、以下のクエリを実行して変更しますExecutionPolicy

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

変更の確認を求められたら、 'Y'を押してEnterキーを押します。



0
  1. 管理者としてPowerShellを開く
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

このコマンドを使用



-2

管理者としてPowerShellウィンドウを開きます。それが動作します。


うまくいきませんでした。ただし、Powershell Set-ExecutionPolicy RemoteSignedを実行しても機能しました。
Thronk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.