PowerShell で .ps1 が実行できない(このシステムではスクリプトの実行が無効になっている)
Windows PowerShell 5.1 のクライアント既定は Restricted で、すべての .ps1 が実行できない。Set-ExecutionPolicy -Scope CurrentUser RemoteSigned で管理者権限なしに解除できる。
公開: 更新:
要約
.ps1 を実行しようとして次のエラーが出る場合、スクリプトの中身は一切関係ない。
PowerShell の実行ポリシーがスクリプトファイルの実行そのものを禁じている。
PS C:\work> .\setup.ps1
.\setup.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル
C:\work\setup.ps1 を読み込むことができません。
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccessWindows クライアントに標準搭載される Windows PowerShell 5.1 の既定は Restricted で、公式ドキュメント(新しいタブで開く)にあるとおり「個別のコマンドは許可するが、スクリプトは許可しない」という設定である。
つまり初期状態の Windows では .ps1 は必ずこのエラーになる。
現在のユーザーだけを RemoteSigned に変えるのが定番の解決策で、管理者権限も要らない。
実行例
検証した PC は LocalMachine が RemoteSigned だったので、Windows クライアントの既定の Restricted を Process スコープで作って .\setup.ps1 を実行すると「このシステムではスクリプトの実行が無効になっている」で読み込めず、同じ状態でも powershell.exe -ExecutionPolicy Bypass -File で起動した子プロセスでは実行できた。Zone.Identifier を付けたファイルは RemoteSigned でも「デジタル署名されていません」で弾かれ、Unblock-File で外すと実行でき、最後の Get-ExecutionPolicy -List は最初と同じ値のままだった。
$ Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned$ Set-ExecutionPolicy -Scope Process -ExecutionPolicy Restricted -Force; .\setup.ps1
.\setup.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\Public\verify-ep\setup.ps1 を読
み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照
してください。
発生場所 行:1 文字:72
+ ... Policy -Scope Process -ExecutionPolicy Restricted -Force; .\setup.ps1
+ ~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess$ Set-ExecutionPolicy -Scope Process -ExecutionPolicy Restricted -Force; powershell.exe -ExecutionPolicy Bypass -File .\setup.ps1
setup.ps1 が実行された$ Get-Item .\setup.ps1 -Stream * | Format-Table Stream, Length -AutoSize
Stream Length
------ ------
:$DATA 48
Zone.Identifier 26$ Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned -Force; .\setup.ps1
.\setup.ps1 : ファイル C:\Users\Public\verify-ep\setup.ps1 を読み込めません。ファイル C:\Users\Public\verify-ep\setup.ps
1 はデジタル署名されていません。このスクリプトは現在のシステムでは実行できません。スクリプトの実行および実行ポリシーの設定
の詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:74
+ ... licy -Scope Process -ExecutionPolicy RemoteSigned -Force; .\setup.ps1
+ ~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess$ Unblock-File .\setup.ps1; Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned -Force; .\setup.ps1
setup.ps1 が実行された$ Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned— 2026-09-28 時点の出力
検証環境
- 検証日
- 実行環境
local host (Windows 11 Home, Docker 29.8.0)- バージョン
- Node.js 22.14.0
- npm 10.9.2
- Git 2.48.1.windows.1
- Docker 29.8.0
この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。
よくある原因
- 既定が
Restricted: Windows クライアントの既定値である。.ps1だけでなくモジュール(.psm1)やプロファイルも読み込まれない。
なお Windows Server の既定はRemoteSignedなので、サーバーでは動いたスクリプトが手元の PC で落ちる、という食い違いが起きる。 - 優先度の高いスコープが勝っている: 実行ポリシーは
MachinePolicy→UserPolicy→Process→CurrentUser→LocalMachineの順に優先される(Get-ExecutionPolicy -Listの並びと同じ)。
グループポリシーで配布されている環境では、Set-ExecutionPolicyが成功しても実効値が変わらない。 LocalMachineを権限なしで変更した: スコープを省略するとLocalMachineが対象になる。
管理者として実行していないと書き込みに失敗する。- ダウンロードしたファイルがブロックされている:
RemoteSignedはローカルで書いたスクリプトには署名を求めないが、インターネット由来のファイルには求める。
ブラウザやメールクライアントが付けた代替データストリームが残っていると、ポリシーを緩めても個別に弾かれる。
解決策
1. CurrentUser スコープで RemoteSigned にする
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedCurrentUser スコープなら管理者権限は不要で、変更は即時に有効になる。
PowerShell を再起動する必要もない。RemoteSigned は「ローカルで書いたスクリプトは署名なしで実行、ダウンロードしたものは署名必須」という設定で、Unrestricted や Bypass より安全側に倒せる。
2. どのスコープが勝っているか確認する
変更したのに実効値が変わらないときは、スコープごとの値を並べて見る。
Get-ExecutionPolicy -List Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine UndefinedMachinePolicy や UserPolicy に値が入っている場合はグループポリシーによる配布なので、PowerShell 側からは上書きできない。
管理者に相談するか、次の単発実行で回避する。
3. その場限りで実行する
ポリシーを恒久的に変えたくない、あるいは変えられない場合は、プロセススコープを使う。
powershell.exe -ExecutionPolicy Bypass -File .\setup.ps1この指定はレジストリではなく $Env:PSExecutionPolicyPreference に保存され、セッションを閉じると消える。
CI やインストーラーのようにその場だけ動かせばよい用途に向く。
4. ダウンロードした .ps1 のブロックを外す
Unblock-File .\setup.ps1ブロックされているかどうかは Get-Item .\setup.ps1 -Stream * で Zone.Identifier ストリームの有無として確認できる。
GitHub から ZIP で取得したスクリプト群がまとめて弾かれる場合は、展開先のフォルダに対して Get-ChildItem -Recurse | Unblock-File を流すとよい。