【解決法まとめ】PowerShellの「PSSecurityException」とは?原因と対処法をわかりやすく解説!

Windows

PowerShellスクリプトを実行しようとしたとき、以下のようなエラーメッセージが表示されて困ったことはありませんか?

File C:\script.ps1 cannot be loaded because running scripts is disabled on this system.
At line:1 char:1
+ .\script.ps1
+ ~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

このエラーの正体は、「PSSecurityException」

これはPowerShellのセキュリティ機能(実行ポリシー)によってスクリプトがブロックされたときに表示される例外です。

この記事では、PSSecurityExceptionが出る原因・解決方法・安全にスクリプトを実行するための設定手順を初心者向けに丁寧に解説します。

スポンサーリンク

「PSSecurityException」とは?

PSSecurityException は、PowerShellがスクリプト実行時にセキュリティ上の問題を検知したときに発生する例外(エラー)です。

特に多く見られるのが、実行ポリシー(Execution Policy)によってスクリプトがブロックされた場合です。

エラーが発生する典型的なシナリオ

シナリオ原因
.ps1 スクリプトをダブルクリック or コマンドで実行実行ポリシーが「Restricted」になっていて、スクリプト実行が禁止されている
インターネットからダウンロードしたスクリプトを実行セキュリティ上「未署名スクリプト」がブロックされる
権限のないユーザーで実行管理者権限が必要なスクリプトを通常ユーザーで実行している

対処法①:実行ポリシーを変更する(基本)

PowerShellを「管理者として実行」したうえで、以下のように入力します:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

解説:

  • RemoteSigned:インターネットからダウンロードしたファイルには署名が必要
  • -Scope CurrentUser:自分のユーザーだけに適用(システム全体ではない)

安全性と利便性のバランスが取れているおすすめ設定です。

現在の実行ポリシーを確認するには:

Get-ExecutionPolicy -List

対処法②:スクリプトファイルに署名する(上級者向け)

企業環境やセキュリティが厳しい環境では、スクリプトにコード署名(Code Signing)が求められる場合があります。

# 証明書の取得(例:自己署名証明書を作成する場合)
$cert = New-SelfSignedCertificate -Subject "CN=PowerShellScript" -Type CodeSigningCert -CertStoreLocation "Cert:\CurrentUser\My"

# スクリプトへの署名
Set-AuthenticodeSignature -FilePath "C:\script.ps1" -Certificate $cert

ただし、証明書の取得と管理が必要となるため、上級者・管理者向けの手法です。

実行ポリシーの種類と違い一覧

実行ポリシー説明
Restrictedすべてのスクリプト実行を禁止(初期設定)
AllSignedすべてのスクリプトに署名が必要
RemoteSigned外部ファイルのみ署名が必要(おすすめ)
Unrestrictedすべてのスクリプトが実行可能(非推奨)
Bypass警告も制限もなし(自動化環境向け)

セキュリティ上、安易に UnrestrictedBypass にするのは避けましょう!

よくある誤解と注意点

誤解・ミス正しい理解
「スクリプトが壊れている」実は実行ポリシーで止められているだけです
Set-ExecutionPolicy は一度だけでOK?スコープ(CurrentUser / LocalMachine)により異なります
管理者として実行していない実行ポリシーの変更には管理者権限が必要です

スクリプト実行時に一時的にポリシーをバイパスする方法:

powershell.exe -ExecutionPolicy Bypass -File "C:\script.ps1"

この方法は、システム全体の設定を変更せずにスクリプトを実行できますが、セキュリティ上の判断が必要です。

まとめ:安全かつ柔軟にPowerShellを使いこなそう

PSSecurityExceptionは決して「危険なエラー」ではなく、PowerShellがセキュリティ保護のためにブロックしているというメッセージです。

原因と対策を理解すれば、安全にスクリプトを活用できる環境を構築できます。

ポイントまとめ

  • PSSecurityException はスクリプト実行制限によるセキュリティ例外
  • 対処法は Set-ExecutionPolicy で実行許可設定を変更する
  • セキュリティと利便性のバランスが重要
  • 管理者として実行することで多くの制限が解除される

PowerShellを活用して、あなたの業務をもっと自動化・効率化していきましょう!

コメント

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