web-dev-qa-db-ja.com

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

コマンドプロンプトからPowerShellスクリプトを呼び出す.cmdファイルを実行しようとしていますが、次のようなエラーメッセージが表示されます。

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

私はset-executionpolicy unrestrictedを実行し、PowerShellからget-executionpolicyを実行するとunrestrictedが返されます。

// Powershellからの出力

PS C:¥Users¥Administrator> get-executionpolicy

無制限

// DOSから出力

C:¥Projects¥Microsoft.Practices.ESB¥Source¥Samples¥Management Portal¥Install¥Scr

ipts> powershell。\ Management_Install.ps1 1

警告: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>一時停止

何かキーを押すと続行します 。 。 。

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

何がおかしいのですか?

1396
Conor

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

Administrator として、PowerShellウィンドウに次のように入力して実行ポリシーを設定できます。

Set-ExecutionPolicy RemoteSigned

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

1836
Chad Miller

PowerShellの実行時に-ExecutionPolicy ByPassを追加することでこのポリシーを回避できます。

powershell -ExecutionPolicy ByPass -File script.ps1
592
Jack Edmonds

私は同様の問題を抱えていて、 Windows Server 2012 のデフォルトのcmdはx64のものを実行していたことに注意しました。

Windows 7Windows 8Windows Server 2008 R2、またはWindows Server 2012の場合は、Administratorとして次のコマンドを実行します。

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 - 32bitと64bitのディレクトリの説明

114
Ralph Willgoss

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

TechNetから [実行ポリシーについて]ページ

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

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

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

現在の実行ポリシーを確認するには、 Get-ExecutionPolicy を実行します。あなたはそれを変更したいのでしかし、あなたはたぶんここにいます。

そのためには Set-ExecutionPolicy cmdletを実行します。

実行ポリシーを更新する際には、主に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メタデータを含まない)独自のスクリプトに対する内部の制限を厳しくしたい場合は、署名済みのスクリプトのみを実行するようにポリシーに強制することができます。自分のスクリプトに署名するには、Scott Hanselmanによる Signing PowerShell Scripts の記事の指示に従うことができます。

:ほとんどの人は、起動時に最初にPSが実行しようとするユーザープロファイルスクリプトを実行して環境を設定するため、Powershellを開くたびにこのエラーが発生する可能性があります。 

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

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

Powershell変数を実行して正確な位置を見つけることができます

$profile

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

103
KyleMit

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

set-executionpolicy unrestricted
34
manik sikka

Windows 7の場合:

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

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

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

64ビット版のPowershell ISE(x86版以外)にもこれらの手順を繰り返します。

@Chad Millerが示唆したステップを明確にしているだけです。ありがとうチャド!

34
Ryan

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

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

または

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

あなたはそれについてのすべてをヘルプエントリで読むことができます。

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

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

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

Set-ExecutionPolicy RemoteSigned
23
Jaime

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

Get-ExecutionPolicy;

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

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

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

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

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

Bypass policyでは、ブロックされるものはなく、スクリプトの実行中に警告やプロンプトは表示されません。バイパスExecutionPolicyUnrestrictedよりもリラックスしています。

19
Pratik Patil

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

[x64]

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

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

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

それで私は別の方法を見つけました(解決策):

  1. 実行コマンド/コンソール(Win + R
  2. 次のように入力します。gpedit.mscグループポリシー 編集者)
  3. ローカルコンピュータポリシー - >コンピュータの構成 - >管理用テンプレート - に移動します。 >Windowsコンポーネント - >Windows Powershell
  4. "スクリプト実行を有効にする"を有効にする
  5. 必要に応じてポリシーを設定してください。私は「すべてのスクリプトを許可する」に設定します。

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

18
hugocabral

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

9
ScriptAholic

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

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

そしてスクリプトを実行してください。

その後、以下のように変更を元に戻します。

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

次のコマンドを使用してこれを回避することもできます。

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

管理者権限がない場合に、PowerShellのSet-ExecutionPolicyを迂回するための15の異なる方法を説明しているScott Sutherlandによるこの記事を読むこともできます。

PowerShell実行ポリシーを回避する15の方法

7
Alexander Sinno
  1. 管理者としてPowerShellを開き、 Set-ExecutionPolicy -Scope CurrentUser を実行します。
  2. RemoteSigned を入力してEnterキーを押します。
  3. 実行 Set-ExecutionPolicy - スコープCurrentUser
  4. 制限なし を入力してEnterキーを押します。
5
Ramanujam Allam

PowerShellの _ ise _ エディタで、最初に許可されているスクリプトは次の行を実行していました。

Set-ExecutionPolicy RemoteSigned -Scope Process
2
David Douglas

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

それ以降、PowerShellチームは多くの改良を加えました。スクリプトを実行している間、ユーザーがそれほど問題を起こさないと確信しています。そのため、PowerShell 4.0以降では、デフォルトで有効になっています。

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

1
Adil Arif

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

1

私はこの行が私の Windows Server 2008 R2サーバーのうちの1台に最適に機能することを見つけました。私のPowerShellスクリプトでは、この行がなければ他の何人かに問題はありませんでした。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
0
WIlliamT

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

0
Suganthan Raj

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

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

上記のジャック・エドモンズ、および投稿のピーター・モーテンセン/ダーナの両方から コマンドプロンプトから「管理者として実行」としてアプリケーションを実行する方法

0
Kirt Carson

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

これは、32ビットポリシーだけをリモートで変更する方法です。

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

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

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

そのコマンドは "MyDocuments"フォルダを取得するためのものです。

-ExecutionPolicy Unrestrictedがうまくいきます。

他の人に役立つことを願っています。

0
JGutierrezC