見出し画像

PowerShell 「このシステムではスクリプトの実行が無効になっているため~」の対応

PowerShellに初めて触れた人が最も引っ掛かる、実行ポリシーを解説します。


初期状態のPowerShellはスクリプト(ps1ファイル)を直接実行できないようなセキュリティの設定になっています。
そのためps1ファイルを実行すると、

PS C:\temp> .\test.ps1
.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\temp\test.ps1 を読み込むことができませ
ん。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
 + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
 + FullyQualifiedErrorId : UnauthorizedAccess

このようになります。
初期状態ではスクリプト(ps1ファイル)の実行を無効にしているため、このようなエラーが表示されます。
初めてPowerShellに触れたときは意味が分からずPS1ファイルの中を見直してしまいますがPowerShellの設定の問題です。

設定を見るにはGet-ExecutionPolicyコマンドレットを使います。

PS C:\temp> Get-ExecutionPolicy -List

 Scope ExecutionPolicy
 ----- ---------------
 MachinePolicy Undefined
 UserPolicy Undefined
 Process Unrestricted
 CurrentUser Restricted
 LocalMachine Restricted

この実行結果メッセージは、ちょっと分かりにくいのですがScope(スコープ)とExecutionPolicy(実行ポリシー)がどのような状態なのかを示しています。

Scopeとは範囲のこと。気にしないといけないのはProcessとCurrentUserのところで、Processは実行中のターミナル内のこと、CurrentUserは自ユーザーが実行する全てのProcessを指します。ほとんどこの2つのスコープしか触ることはありません。

ExecutionPolicyには次の意味があります。
 AllSigned 署名されているスクリプトのみ実行可能。
 Bypass 一番緩い。何もブロックされず、警告やプロンプトも表示されません。
 RemoteSigned インターネットからダウンロードしたスクリプトは信頼できる発行元によって署名されている必要があります。ローカルのスクリプトはそのまま実行できる。
 Restricted スクリプトの実行は行いません。Windowsクライアントでの既定の実行ポリシーです。
 Undefined Restrictedと同じです
 Unrestricted WindowsではBypassと同じです。

「Bypass」と「Restricted」だけ覚えておけばいいです。

特定のスクリプトファイル(ps1)実行時のみ緩くする

PowerShell -ExecutionPolicy Bypass -File c:\temp\test.ps1

これはtest.ps1を実行するときだけ実行ポリシーを緩くしています。
よく使うのでこのまま覚えておきましょう。


実行中のプロセスだけセキュリティを緩くする

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force

このコマンドレット実行後には同じプロセス(同じターミナル内)で実行するスクリプトは全て実行可能になります。
複数のps1ファイルを実行する場合はこちらでセキュリティを緩くします。
プロセスが終了する(ターミナルを閉じる)とセキュリティは元に戻ります。
オプション-Forceが無い場合は許可が必要になります↓

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"):

オプション-Forceが無い場合は上のようなメッセージが表示されるので必ずつけておきましょう。


恒久的にセキュリティを緩くします

Set-ExecutionPolicy -ExecutionPolicy Bypass -Force -scope CurrentUser

セキュリティ的には、よくない設定。PowerShellのスクリプトファイルを使って多くの処理をするときは使ってもいいかもしれません。用が済んだらBypassをRestrictedに戻しておきましょう。



#PowerShell #コマンドレット #プログラミング初心者 #プログラミング #Windows #セキュリティ #実行ポリシー




この記事が気に入ったらサポートをしてみませんか?