コマンドプロンプトから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です。
何がおかしいのですか?
Windows Server 2008 R2を使用している場合は、 x64 および x86 バージョンのPowerShellがあり、どちらも実行ポリシーを設定する必要があります。両方のホストで実行ポリシーを設定しましたか?
Administrator として、PowerShellウィンドウに次のように入力して実行ポリシーを設定できます。
Set-ExecutionPolicy RemoteSigned
詳細については、「Set-ExecutionPolicyコマンドレットの使用」を参照してください。
PowerShellの実行時に-ExecutionPolicy ByPass
を追加することでこのポリシーを回避できます。
powershell -ExecutionPolicy ByPass -File script.ps1
私は同様の問題を抱えていて、 Windows Server 2012 のデフォルトのcmd
はx64のものを実行していたことに注意しました。
Windows 7、Windows 8、Windows 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
を実行します
あなたが使用してモードを確認することができます
echo %PROCESSOR_ARCHITECTURE%
[Environment]::Is64BitProcess
参照:
MSDN - Windows PowerShellの実行ポリシー
Windows - 32bitと64bitのディレクトリの説明
既存の回答のほとんどは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は実行できないものを見つけることができません。
スクリプトの前にこのコマンドを実行しても問題は解決します。
set-executionpolicy unrestricted
Windows 7の場合:
スタートメニューに移動し、「Windows PowerShell ISE」を検索します。
X86バージョンを右クリックして「管理者として実行」を選択します。
上部にSet-ExecutionPolicy RemoteSigned
を貼り付けます。スクリプトを実行してください。 「はい」を選択してください。
64ビット版のPowershell ISE(x86版以外)にもこれらの手順を繰り返します。
@Chad Millerが示唆したステップを明確にしているだけです。ありがとうチャド!
自分が管理者ではない環境にいる場合は、自分だけの実行ポリシーを設定できます。管理者は必要ありません。
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
または
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
あなたはそれについてのすべてをヘルプエントリで読むことができます。
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
RemoteSigned:自分で作成したすべてのスクリプトが実行され、インターネットからダウンロードされたすべてのスクリプトは信頼できる発行元によって署名される必要があります。
次のように入力してポリシーを変更します。
Set-ExecutionPolicy RemoteSigned
以下のコマンドで現在の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では、ブロックされるものはなく、スクリプトの実行中に警告やプロンプトは表示されません。バイパスExecutionPolicy
はUnrestricted
よりもリラックスしています。
私はWindows 10を使用していて、コマンドを実行できませんでした。私に手がかりを与えた唯一のコマンドはこれでした:
[x64]
- C:\ Windows\SysWOW64\cmd.exeを開きます[管理者として]
- >powershell Set-ExecutionPolicy Unrestrictedコマンドを実行します。
しかしこれはうまくいきませんでした。限られていました。 Windows 10用のおそらく新しいセキュリティポリシー。私はこのエラーがありました:
Set-ExecutionPolicy:Windows PowerShellは実行ポリシーを正常に更新しましたが、設定はより具体的な範囲で定義されたポリシーによって上書きされます。上書きにより、あなたのシェルは現在有効な実行ポリシーを保持します。
それで私は別の方法を見つけました(解決策):
今PowerShellを開いてお楽しみください;)
実行ポリシーの設定は環境によって異なります。実行中のx86 ISE からスクリプトを実行しようとしている場合は、実行ポリシーを設定するためにx86 PowerShellを使用する必要があります。同様に、64ビットISEを実行している場合は、64ビットPowerShellを使用してポリシーを設定する必要があります。
Win + R コピーペーストコマンドを入力してを押します OK:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
そしてスクリプトを実行してください。
その後、以下のように変更を元に戻します。
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
次のコマンドを使用してこれを回避することもできます。
PS > powershell Get-Content .\test.ps1 | Invoke-Expression
管理者権限がない場合に、PowerShellのSet-ExecutionPolicy
を迂回するための15の異なる方法を説明しているScott Sutherlandによるこの記事を読むこともできます。
PowerShellの _ ise _ エディタで、最初に許可されているスクリプトは次の行を実行していました。
Set-ExecutionPolicy RemoteSigned -Scope Process
PowerShell 2.0では、実行ポリシーはデフォルトで無効に設定されていました。
それ以降、PowerShellチームは多くの改良を加えました。スクリプトを実行している間、ユーザーがそれほど問題を起こさないと確信しています。そのため、PowerShell 4.0以降では、デフォルトで有効になっています。
あなたのケースでは、PowerShellコンソールからSet-ExecutionPolicy RemoteSigned
と入力して「yes」と言います。
レジストリパスHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
に移動し、ExecutionPolicy
をRemoteSigned
に設定します。
私はこの行が私の Windows Server 2008 R2サーバーのうちの1台に最適に機能することを見つけました。私のPowerShellスクリプトでは、この行がなければ他の何人かに問題はありませんでした。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
Administrator としてPowerShellウィンドウを開きます。それが動作します。
いくつかの回答が実行ポリシーを示しています。ただし、「runas管理者」も必要な場合があります。これは、実行ポリシーに永続的な変更がなく、過去の管理者の制限を取得できるという点で最も安全です。 schedtaskを使用して、次のバッチを開始します。
runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1
上記のジャック・エドモンズ、および投稿のピーター・モーテンセン/ダーナの両方から コマンドプロンプトから「管理者として実行」としてアプリケーションを実行する方法
今日も同じ問題がありました。 64ビットの実行ポリシーは無制限で、32ビットは制限されていました。
これは、32ビットポリシーだけをリモートで変更する方法です。
Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}