PowerShell には「このシステムではスクリプトの実行が無効になっています」と表示されます。
-
27-09-2019 - |
質問
を実行しようとしています cmd を呼び出すファイル パワーシェル からのスクリプト 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
カテゴリ情報 :指定されていない:(:) []、PSSecurityException
FullyQualifiedErrorId :ランタイム例外
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSE
Press any key to continue . . .
システムはWindows Server 2008R2です。
私の何が間違っているのでしょうか?
他のヒント
あなたはPowerShellを実行するときに-ExecutionPolicy ByPass
を追加することで、このポリシーをバイパスすることができます。
powershell -ExecutionPolicy ByPass -File script.ps1
同様の問題があり、デフォルトで cmd
の上 Windowsサーバー2012, 、x64 のものを実行していました。
のために Windows 7, ウィンドウズ8, ウィンドウズ10, Windows Server 2008 R2 または Windowsサーバー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 ビットのディレクトリの説明
既存の回答のほとんどは、 どうやって, 、しかし、それを説明している人はほとんどいません。 なぜ. 。また、インターネット上で見知らぬ人からのコード、特にセキュリティ対策を無効にするコードを実行する前に、自分が何をしているのかを正確に理解する必要があります。そこで、この問題についてもう少し詳しく説明します。
TechNet より 「実行ポリシーについて」ページ:
Windows PowerShell 実行ポリシーを使用すると、Windows PowerShell が構成ファイルを読み込んでスクリプトを実行する条件を決定できます。
その利点を列挙すると、 PowerShell の基本 - 実行ポリシーとコード署名, 、 は:
- 実行の制御 - スクリプト実行の信頼レベルを制御します。
- コマンドハイジャック - パスへのコマンドの挿入を防ぎます。
- 身元 - スクリプトは私が信頼する開発者によって作成および署名されているか、または信頼する認証局からの証明書で署名されているか、あるいはその両方か。
- 誠実さ - マルウェアや悪意のあるユーザーがスクリプトを変更することはできません。
現在の実行ポリシーを確認するには、次のコマンドを実行します。 Get-ExecutionPolicy
. 。しかし、あなたはおそらくそれを変えたいと思ってここにいるのです。
そのためには、 Set-ExecutionPolicy
コマンドレット。
実行ポリシーを更新する際には、2 つの主要な決定を行う必要があります。
実行ポリシーのタイプ:
Restricted
† - ローカル、リモート、またはダウンロードされたスクリプトはシステム上で実行できません。AllSigned
- 実行されるすべてのスクリプトにはデジタル署名が必要です。RemoteSigned
- すべてのリモート スクリプト (UNC) またはダウンロードには署名する必要があります。Unrestricted
- どのタイプのスクリプトでも署名は必要ありません。
新たな変更の範囲
LocalMachine
† - 実行ポリシーは、コンピュータのすべてのユーザーに影響します。CurrentUser
- 実行ポリシーは現在のユーザーにのみ影響します。Process
- 実行ポリシーは、現在の Windows PowerShell プロセスにのみ影響します。
† = デフォルト
例えば:CurrentUser のみのポリシーを RemoteSigned に変更する場合は、次のコマンドを実行します。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
注記:実行ポリシーを変更するには、以下を実行する必要があります。 管理者としての PowerShell。通常モードで実行ポリシーを変更しようとすると、次のエラーが表示されます。
レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。デフォルト (LocalMachine) スコープの実行ポリシーを変更するには、「管理者として実行」オプションを使用して Windows PowerShell を起動します。
インターネットからダウンロードされていない (または少なくとも UNC メタデータが含まれていない) 独自のスクリプトに対する内部制限を強化したい場合は、署名付きスクリプトのみを実行するようにポリシーを強制できます。独自のスクリプトに署名するには、Scott Hanselman の記事の指示に従ってください。 PowerShell スクリプトへの署名.
注記:ほとんどの人は、Powershell を開くたびにこのエラーが発生する可能性があります。これは、PS が起動すると最初に実行しようとするのは、環境を好みに合わせて設定するユーザー プロファイル スクリプトの実行であるためです。
ファイルは通常、次の場所にあります。
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
powershell 変数を実行すると、正確な場所を見つけることができます。
$profile
プロファイルに気になるものが何もなく、セキュリティ設定に手間をかけたくない場合は、プロファイルを削除するだけで、PowerShell は実行できないものを見つけることができなくなります。
ゴースタートメニューへと "Windows PowerShellのISE" を検索します。
右x86バージョンをクリックして「管理者として実行」を選択します。
上部に、Set-ExecutionPolicy RemoteSigned
を貼り付けます。スクリプトを実行します。 "はい" を選択します。
すぎるPowershellのISEの64ビットバージョン(非x86バージョン)のために、これらの手順を繰り返します。
私はちょうど@Chadミラーがほのめかしていることの手順を明確にしています。おかげでチャド!
また、このコマンドを実行するスクリプトはまた、問題が解決する前に:
set-executionpolicy unrestricted
、あなたはあなたのためだけに実行ポリシーを設定することができ、そしてそれは、管理者を必要としません。
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
または
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
あなたはヘルプ項目にそれについてのすべてを読むことができます。
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
はRemoteSigned。
OK、単純に次のように入力してポリシーを変更します:
Set-ExecutionPolicy RemoteSigned
我々は、以下のコマンドにより、現在のExecutionPolicy
のステータスを取得することができます:
Get-ExecutionPolicy;
デフォルトでは、 に制限があります。 PowerShellスクリプトの実行を許可するために、我々は、このExecutionPolicyを設定する必要がありますいずれかとのバイパスまたは無制限の。
私たちは、PowerShellのコマンド以下のいずれかを使用してBypass
またはUnrestricted
として現在のユーザーのためのポリシーを設定することができます:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;
の無制限のポリシーをロードするすべての構成ファイルとすべてのスクリプトを実行します。あなたは、インターネットからダウンロードした未署名のスクリプトを実行した場合、あなたはそれを実行する前に許可を求めるメッセージが表示されます。
で一方のバイパスの政策、何がブロックされていないと、スクリプトの実行中に何の警告やプロンプトはありません。バイパスExecutionPolicy
がよりUnrestricted
よりも緩和されます。
使っています ウィンドウズ10 コマンドを実行できませんでした。いくつかの手がかりを与えてくれた唯一のコマンドは次のとおりです。
[x64]
- C:\Windows\SysWOW64\cmd.exe を開きます [管理者として]
- コマンドを実行します> powershell Set-ExecutionPolicy 無制限
しかし、これはうまくいきませんでした。それは限られていました。おそらく Windows10 の新しいセキュリティ ポリシーでしょう。このエラーが発生しました:
実行ポリシーの設定:Windows PowerShell は実行ポリシーを正常に更新しましたが、設定はより具体的なスコープで定義されたポリシーによって上書きされます。オーバーライドにより、シェルは現在の有効な実行ポリシーを保持します...
そこで別の方法を見つけました(解決):
- 実行コマンド/コンソールを開きます (勝つ + R)
- タイプ: gpedit.msc (グループポリシー 編集者)
- 参照する ローカルコンピュータポリシー -> コンピュータの構成 -> 管理用テンプレート -> Windows コンポーネント -> Windows Powershell.
- 有効にする "スクリプトの実行をオンにする"
- 必要に応じてポリシーを設定します。私は「」に設定しましたすべてのスクリプトを許可する".
さあ、PowerShell を開いて楽しんでください ;)
実行ポリシーを設定すると、環境に固有です。あなたが持っているのx86 ISE を実行しているからスクリプトを実行しようとしている場合実行ポリシーを設定するには、x86のPowerShellを使用しています。同様に、あなたは、64ビットISEを実行している場合は、64ビット版のPowerShellでポリシーを設定する必要があります。
ウィン + 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種類の方法を説明しますスコットSutherlandのこの記事を読むことができます:
- PowerShell を管理者として開き、実行します Set-ExecutionPolicy -Scope CurrentUser
- 提供する リモート署名済み そしてEnterを押してください
- 走る Set-ExecutionPolicy -Scope CurrentUser
- 提供する 無制限 そしてEnterを押してください
でのPowerShell 2.0、実行ポリシーは、デフォルトでは無効になっに設定した。
その時から、PowerShellチームは、多くの改善を行っている、と彼らは、スクリプトを実行中に、ユーザーが多くのものを破壊しないと確信しています。だから、PowerShellの4.0から以降、それはデフォルトで有効になっています。
あなたのケースでは、、PowerShellコンソールからタイプSet-ExecutionPolicy RemoteSigned
とはい言ってます。
私は今日、同じ問題を抱えていました。 32ビットが制限しながら、64ビットの実行ポリシーは、無制限た。
ここでリモートからちょうど32ビットのポリシーを変更する方法は次のとおりです。
Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
にレジストリパスExecutionPolicy
とセットRemoteSigned
に移動します。
いくつかの答えは、実行ポリシーを指します。しかし、いくつかのものはまた、「runasコマンド管理者」が必要です。そこに実行ポリシーへの恒久的な変更はありません、そして過去の管理者の制限を得ることができるという点で、これが最も安全です。 schedtaskで使用してバッチを起動します:
runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1
上記の両方のジャック・エドモンズ、そしてポストのピーター・モーテンセン/ダナ<のhref = "からhttps://stackoverflow.com/questions/8249705/how-to-run-an-application-as-run-as-administrator -from--コマンド・プロンプト ">のようにアプリケーションを実行する方法『コマンドから』管理者として実行し、プロンプトですか
私は、この行はR2サーバーの私の Windows Server 2008のの1のために最高の仕事を見つけました。他のカップルは私のPowerShellスクリプトにこの行せずに何の問題もなかった。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
開くの管理者のようにPowerShellウィンドウ。それは動作します。