こんにちわますのです。
PowerShellを実行する機会が増えてきた今日この頃。ps1データを実行する時にオプションを指定しないと実行出来ないのです。
これはWindowsの初期設定ではPowerShellスクリプトを実行出来ないように、設定されていないからです。
マルウェアとかが勝手にps1を仕込んで情報収集とかをしないように、ウイルス対策をしているのですね。
毎回調べて設定するので、単体記事としてメモを残していきたいと思います。
タスクスケジューラでPowerShellを実行したい場合も同じような形になりますのでこちらの記事を参考にしてください。
PowerShellをタスクスケジューラーに登録して実行する方法
エラー内容:このシステムではスクリプトの実行が無効
PS C:\test\Script> .\PS-test.ps1
.\PS-test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\test\Script\PS-test.ps1 を読み込むことができません。
詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\PS-test.ps1+ ~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAcces
実行するには「-ExecutionPolicy」にオプションを付ける
デフォルト設定では「Restricted」に設定されていてスクリプトの実行が出来ないように端末制御をしています。規定値をPowerShellコマンド「Set-ExecutionPolicy」で変更して、常にオプション無しで実行できる状態にすることも出来ますがマルウェア感染時のことを思うとあまりオススメはできません。
状況に応じて実行時にポリシー箇所を変更するようにしましょう。
「-ExecutionPolicy(ポリシー) .\実行ファイル名.ps1」
PS C:\test\Script> powershell -ExecutionPolicy Bypass .\PS-test.ps1
test
ポリシー | 内容 |
---|---|
Restricted | 既定値。構成ファイルの読み込みやスクリプトを実行しません。 |
AllSigned | すべてのスクリプトと構成ファイルが信頼された発行元によって署名されていることを要求します (ユーザーがローカル コンピューターに書き込むスクリプトを含む)。 |
RemoteSigned | インターネットからダウンロードされたすべてのスクリプトおよび構成ファイルが、信頼された発行元によって署名されていることを要求します。 |
Unrestricted | すべての構成ファイルを読み込み、すべてのスクリプトを実行します。インターネットからダウンロードされた署名されていないスクリプトを実行する場合、スクリプトを実行する前に確認を求められます。 |
Bypass | 何もブロックされず、警告もメッセージも表示されません。 |
参照:PowerShellのExecutionPolicyのスコープとかについて詳しく
参照:About Execution Policies
余談:現在設定されている実行ポリシーを確認する
PowerShellから「Get-ExecutionPolicy」を使って確認しましょう。
↓のように結果が返ってきます。わたしのPCはデフォルト設定の「Restricted」が設定されている状態です。
PS C:\test\Script> PowerShell Get-ExecutionPolicy
Restricted
エラーが出ることは覚えているのですが、オプションについてはすっかり忘れてしまうのです。
毎回調べるのも面倒なので自分用メモとしてオプションに関する記事を残すようにしました。
毎回調べるのも面倒なので自分用メモとしてオプションに関する記事を残すようにしました。