既存の回答のほとんどはHowを説明していますが、 Whyを説明しているものはほとんどありません。また、インターネット上の見知らぬ人からのコード、特にセキュリティ対策を無効にするコードを実行する前に、自分が何をしているのかを正確に理解する必要があります。そこで、この問題についてもう少し詳しく説明します。
TechNetの実行ポリシーについてのページから:
Windows PowerShell 実行ポリシーを使用すると、Windows PowerShell が構成ファイルを読み込んでスクリプトを実行する条件を決定できます。
PowerShell Basics - Execution Policy and Code Signingで列挙されている利点は次のとおりです。
- 実行の制御 - スクリプトを実行するための信頼レベルを制御します。
- Command Highjack - パスにコマンドが挿入されるのを防ぎます。
- ID - 信頼する開発者によって作成および署名されたスクリプトであるか、信頼する認証局からの証明書で署名されているか、またはそのいずれかです。
- 整合性- マルウェアや悪意のあるユーザーがスクリプトを変更することはできません。
現在の実行ポリシーを確認するには、Get-ExecutionPolicy
. しかし、あなたはおそらくそれを変えたいと思ってここにいます。
Set-ExecutionPolicy
これを行うには、コマンドレットを実行します。
実行ポリシーを更新するときは、2 つの主要な決定を下す必要があります。
実行ポリシーの種類:
Restricted
†</sup> - ローカル、リモート、またはダウンロードされたスクリプトは、システム上で実行できません。
AllSigned
- 実行されるすべてのスクリプトは、デジタル署名されている必要があります。
RemoteSigned
- すべてのリモート スクリプト (UNC) またはダウンロードしたものは、署名する必要があります。
Unrestricted
- どのタイプのスクリプトにも署名は必要ありません。
新しい変更の範囲
LocalMachine
†</sup> - 実行ポリシーは、コンピューターのすべてのユーザーに影響します。
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 メタデータを含まない) 独自のスクリプトに対する内部制限を強化したい場合は、ポリシーで署名済みの sript のみを実行するように強制できます。独自のスクリプトに署名するには、Scott Hanselman のPowerShell スクリプトの署名に関する記事の手順に従ってください。
注: ほとんどの人は、Powershell を開くたびにこのエラーを受け取る可能性があります。これは、PS が起動したときに最初に実行しようとするのは、環境を設定するユーザー プロファイル スクリプトを実行することだからです。
ファイルは通常、次の場所にあります。
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
powershell 変数を実行すると、正確な場所を見つけることができます。
$profile
プロファイルに気にするものがなく、セキュリティ設定に煩わされたくない場合は、プロファイルを削除するだけで、powershell は実行できないものを検出しません。