Windows11 標準の PowerShell (Version5) アプリで、ローカルの .ps1 スクリプトファイルを実行しようとするとセキュリティエラーで実行できない場合の対処例として、実行ポリシーの確認と設定をコマンドレットで行います。

※ PowerShell 5.1.26100.7019 を使用します。
セキュリティエラーによって .ps1 ファイルを実行できない例
以下の Hello, World! を出力するだけの PowerShell のスクリプトを HelloWorld.ps1ファイルに保存します。
Write-Host "Hello, World!"開いた PowerShell アプリで .ps1 ファイルを実行するとセキュリティエラーが発生しました。
# Windows10 では、許可設定の必要はなかったと思います。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows
PS G:\Dev\PowerShell\HelloWorld> .\HelloWorld.ps1
.\HelloWorld.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル G:\Dev\PowerShell\HelloWorld\HelloW
orld.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?Link
ID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\HelloWorld.ps1
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccessメッセージ内の URL は「about_Execution_Policies – PowerShell | Microsoft Learn」でした。
以降は、そのサイトを参照して、実行ポリシーの確認と設定を行います。
実行ポリシーの確認
現在の実行ポリシーを確認するには、Get-ExecutionPolicy コマンドレットを使用します。
–List オプションをつけることで、各スコープの実行ポリシーを優先順で表示します。
現在の PowerShell セッションに有効な実行ポリシーを取得するには、
about_Execution_Policies – PowerShell | Microsoft LearnGet-ExecutionPolicyコマンドレットを使用します。
各スコープの実行ポリシーを優先順位の順に表示するには、
Get-ExecutionPolicy (Microsoft.PowerShell.Security) – PowerShell | Microsoft LearnGet-ExecutionPolicy -Listを使用します。
Get-ExecutionPolicy -List の実行結果を確認すると全てのスコープで実行ポリシーが未定義です。
※初めて実行ポリシーを確認したので、Windows11 の PowerShell5 のデフォルトの実行ポリシーかもしれません。
PS > Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
実行ポリシーの設定
Set-ExecutionPolicy コマンドレットで、指定したスコープに、指定した実行ポリシーを設定できます。
今回設定する RemoteSigned 実行ポリシーは、ローカルスクリプトを許可します。
Windows コンピューターの PowerShell 実行ポリシーを変更するには、
Set-ExecutionPolicyコマンドレットを使用します。 変更内容はすぐに反映されます。 PowerShell を再起動する必要はありません。ローカル スクリプトおよびリモートの署名済みスクリプトを許可する RemoteSigned
特定のスコープの実行ポリシーを削除するには、実行ポリシーを Undefinedに設定します。
about_Execution_Policies – PowerShell | Microsoft Learn
実行ポリシーは、PowerShell セキュリティ戦略の一部です。 実行ポリシーによって、PowerShell プロファイルなどの構成ファイルを読み込めるか、スクリプトを実行できるかが決まります。
Set-ExecutionPolicy (Microsoft.PowerShell.Security) – PowerShell | Microsoft Learn
例では、CurrentUser スコープに RemoteSigned 実行ポリシーを設定しました。
その後、 Get-ExecutionPolicy –List によって、CurrentUser の実行ポリシーが変更されたことを確認しました。
PS > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
PS > Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine Undefinedローカルの ps1 スクリプトを PowerShell5 で実行
実行ポリシーを変更した直後に、変更前と同様にローカルの .ps1 スクリプトファイルを実行すると、セキュリティエラーは発生せず、ローカルの .ps1 スクリプトファイルを実行できました。

PS > .\HelloWorld.ps1
Hello, World!PowerShell 7.x では問題なし
移行が推奨されている PowerShell 7.x を pwsh とエクスプローラのアドレスバーで入力して起動して、同じ .ps1 スクリプトを実行すると問題なく動作しました。
セキュリティエラーは PowerShell 5.x 系で発生する問題のようです。
古いバージョンである 5.x 系を使用しない方が良いかもしれませんが、 Windows 11 標準は PowerShell 5.x が入っていて、.ps1 ファイルの右クリックメニューの「 PowerShell で実行」も 5.x 系を呼び出すため、ローカルで作成した .ps1 スクリプトを手軽に実行するには、実行ポリシーを変更するとよいかもしれません。

まとめ
- Windows11 標準の PowerShell (Version 5) は、実行ポリシーを設定しないと、ローカルの .ps1 ファイルを実行できず、セキュリティエラーが発生します。
- Get-ExecutionPolicy –List で、現在の実行ポリシーを確認できます。
- Set-ExecutionPolicy コマンドレットで、指定したスコープに指定した実行ポリシーを設定できます。
参照サイト Thank You!
- PowerShell とは – PowerShell | Microsoft Learn
- about_Execution_Policies – PowerShell | Microsoft Learn
- Get-ExecutionPolicy (Microsoft.PowerShell.Security) – PowerShell | Microsoft Learn
- Set-ExecutionPolicy (Microsoft.PowerShell.Security) – PowerShell | Microsoft Learn
- PowerShell の概要 – PowerShell | Microsoft Learn
記事一覧 → Compota-Soft-Press
コメント