Win11 PowerShell5 ローカルのスクリプトを実行する設定例

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

Windows11 PowerShell5 ローカルのスクリプトを実行する設定3

※ PowerShell 5.1.26100.7019 を使用します。

セキュリティエラーによって .ps1 ファイルを実行できない例

以下の Hello, World! を出力するだけの PowerShell のスクリプトを HelloWorld.ps1ファイルに保存します。

Write-Host "Hello, World!"

開いた PowerShell アプリで .ps1 ファイルを実行するとセキュリティエラーが発生しました。
# Windows10 は、許可設定の必要はなかったと思います。

Windows11 PowerShell5 ローカルのスクリプトを実行する設定2
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 セッションに有効な実行ポリシーを取得するには、Get-ExecutionPolicy コマンドレットを使用します。

about_Execution_Policies – PowerShell | Microsoft Learn

各スコープの実行ポリシーを優先順位の順に表示するには、Get-ExecutionPolicy -Listを使用します。

Get-ExecutionPolicy (Microsoft.PowerShell.Security) – PowerShell | Microsoft Learn

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 スクリプトファイルを実行できました。

Windows11 PowerShell5 ローカルのスクリプトを実行する設定3
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 PowerShell5 ローカルのスクリプトを実行する設定1

まとめ

  • Windows11 標準の PowerShell (Version 5) は、実行ポリシーを設定しないと、ローカルの .ps1 ファイルを実行できずセキュリティエラーが発生します。
  • Get-ExecutionPolicy –List で、現在の実行ポリシーを確認できます。
  • Set-ExecutionPolicy コマンドレットで、指定したスコープに指定した実行ポリシーを設定できます。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました