|
現: 2023-11-07 (火) 14:20:48 yuji |
| + | * PowerShellスクリプトが実行できない [#kd2182d4] |
| + | コマンドプロンプトでPowerShell用のスクリプトファイルを実行した時,以下のようなエラーがで実行出来ない。 |
| + | D:\home\ueno> PowerShell .\test.ps1 |
| + | .\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル D:\home\ueno\test.ps1 を読み込むことができません。詳細については,「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 |
| + | 発生場所 行:1 文字:1 |
| + | + .\test.ps1 |
| + | + ~~~~~~~~~~ |
| + | + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException |
| + | + FullyQualifiedErrorId : UnauthorizedAccess |
| | | |
| + | このエラーが発生する原因は,PowerShellのスクリプトの実行が実行ポリシーによって許可されていないことが原因。~ |
| + | Windows10のデフォルトだと,許可されていないようだ。~ |
| + | |
| + | 以下のコマンドで,PowerShellのスクリプトの実行ポリシーについて確認が出来る。 |
| + | D:\home\ueno> PowerShell Get-ExecutionPolicy |
| + | Restricted |
| + | |
| + | デフォルトではこのように''Restricted''という実行ポリシーとなっている。~ |
| + | この設定状態だと,すべてのスクリプトの実行が制限されていることになる。 |
| + | |
| + | 実行ポリシーとしては,以下の状態がある。 |
| + | |実行ポリシー |署名あり|署名なし/ローカル|署名なし/非ローカル |説明|h |
| + | |Restricted |X |X |X |すべてのスクリプトの実行を制限 (初期設定)| |
| + | |AllSigned |◯ |X |X |署名のあるスクリプトのみ実行可能| |
| + | |RemoteSigned |◯ |◯ |X |ローカル上のスクリプトと非ローカル上の署名のあるスクリプトのみ実行可能| |
| + | |Unrestricted |◯ |◯ |△ |すべてのスクリプトが実行可能だが非ローカル上のスクリプトは実行時に許可が必要| |
| + | |Bypass |◯ |◯ |◯ |すべてのスクリプトが実行可能| |
| + | |
| + | ** 実行できるようにする [#m76c43d1] |
| + | 実行できるように対処するには,以下の2つの方法がある。 |
| + | |
| + | + ExecutionPolicyオプションによる実行ポリシーの変更~ |
| + | PowerShellのスクリプトの実行時に引数へExecutionPolicyを指定して実行する。 |
| + | D:\home\ueno> PowerShell -ExecutionPolicy RemoteSigned .\test.ps1 |
| + | test |
| + | 実行するスクリプトに対してのみ,指定した実行ポリシーが適用される。 |
| + | + Set-ExecutionPolicyで実行ポリシーの変更を行う(恒久的)~ |
| + | 実行ポリシーを,恒久的に変更する。~ |
| + | この操作はシステム全体に影響を与えので,管理者権限が必要となる。 |
| + | D:\home\ueno> PowerShell Set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
| + | D:\home\ueno> PowerShell .\test.ps1 |
| + | test |
| + | 以降は指定した実行ポリシーが常に適用されるようになる。 |
| + | |
| + | ** スコープについて [#sb2b6f57] |
| + | 実行ポリシーには適用範囲であるスコープがある。 |
| + | 上記の''Set-ExecutionPolicy''ではScopeオプションを指定して適用範囲とともに設定を行います。 |
| + | |スコープ |適用範囲|h |
| + | |Process |実行ポリシーは現在のWindows PowerShellプロセスにのみ影響します。| |
| + | |CurrentUser |実行ポリシーは現在のユーザーにのみ影響します。| |
| + | |LocalMachine|実行ポリシーはコンピューターのすべてのユーザーに影響します。| |
| + | |
| + | ** 実行ポリシーの設定値はどこに保存されるのか [#pad0a82a] |
| + | 実行ポリシーの保存先は,設定のスコープによって変わる。~ |
| + | |スコープ |保存場所|h |
| + | |Process |環境変数PSExecutionPolicyPreference (プロセス起動時にシステムが付与する環境変数設定ではなく,プロセス内部で処理されるもの)| |
| + | |CurrentUser |レジストリHEKY_CURRENT_USER:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShellのExecutionPolicy| |
| + | |LocalMachine|レジストリHKEY_LOCAL_MACHINE:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShellのExecutionPolicy| |
| + | |
| + | Processでは環境変数にセットされるので注意する。 |