PowerShellをタスクスケジューラーに登録して実行する方法

こんにちわ。ますのです。
最近はPowerShellと向き合う時間が多くなっている今日この頃。
リモートワークでドメインユーザの管理をしたり、FAXの受信をPDF化して定期削除したいなど、細かなものを実装してほしいと依頼が来るであります。

わたし、PowerShell触ったの最近なのですが…
壊しても構わんのでありますな?

はい。PowerShellで簡単な処理を作るのですが、タスクスケジューラに登録する時にいつもコマンドを忘れるのでメモ代わりに残していきます。

タスクスケジューラに登録するコマンドは、PowerShell内で起動させるときにも使えるので覚えておくと幸せになれるかもです。

タスクスケジューラにPowerShell「ps1ファイル」を登録する手順

まずは社内SEみんな大好きタスクスケジューラを起動します。
登録方法は各自あると思いますが我流にて紹介。

①「タスクスケジューラライブラリ」を右クリック>「タスクの作成」をクリック

②タブ「操作」>新規>新しい操作画面で下記の内容を入力し「OK」で登録

プログラム/スクリプト(P) %Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加(オプション)(A) -ExecutionPolicy Bypass (実行ファイルパス)\実行ファイル名.ps1
開始(オプション)(T): (空欄)

ExecutionPolicyの後ろにつけるポリシーについては各自の状況で設定するであります!「Bypass」にしておけば何もブロックされないので、安心できる場所から仕入れたスクリプトなら「Bypass」で良いかと思っております。

また、筆者はタスクスケジューラで開始位置を設定します。
何度か開始位置を設定せずに実行したところ、PowerShell記述ミスでSystem32フォルダ配下やデスクトップデータを吹き飛ばしたのです。
ちゃんと確認しろは置いといて、もはや恐怖症であります。

※こんな感じ※

ちなみにPowerShell上で実行するときはこんな感じ
> powershell -ExecutionPolicy Bypass .\ファイル名.ps1
あとは全般タブやトリガータブで設定を行って実行するだけで起動できるはずです!
オプションのポリシーについてはこのあと説明入れますね。

Powershell実行時のオプション「-ExecutionPolicy」実行ポリシー種類は5つ

PowerShellの実行を直接指定して出来ない!という問題ですが、「実行ポリシー」なるものでセキュリティエラーが出てしまっていることが原因のようです。

デフォルトでは「Restricted」に設定されており、スクリプトの実行を行わないようにしているのです。PowerShellコマンド「Set-ExecutionPolicy」で変更することも出来ますが、最近のセキュリティ事情ではオススメできませんね。PowerShellを起点に情報を盗む仕組みがあるので、常に実行できる環境にはしないほうが良いかと思われます。

状況に応じて実行時にポリシー箇所を変更するようにしましょう。
-ExecutionPolicy(ポリシー) .\実行ファイル名.ps1」

ポリシー 内容
Restricted 既定値。構成ファイルの読み込みやスクリプトを実行しません。
AllSigned すべてのスクリプトと構成ファイルが信頼された発行元によって署名されていることを要求します (ユーザーがローカル コンピューターに書き込むスクリプトを含む)。
RemoteSigned インターネットからダウンロードされたすべてのスクリプトおよび構成ファイルが、信頼された発行元によって署名されていることを要求します。
Unrestricted すべての構成ファイルを読み込み、すべてのスクリプトを実行します。インターネットからダウンロードされた署名されていないスクリプトを実行する場合、スクリプトを実行する前に確認を求められます。
Bypass 何もブロックされず、警告もメッセージも表示されません。

参照:PowerShellのExecutionPolicyのスコープとかについて詳しく
参照:About Execution Policies

検証したり本番設定する時に毎度ググって見つけるのが面倒でしたのでメモでした。
WindowsServerでバッチ処理をしている場合は頻繁に使うと思うのでどちらかというと社内SE向きでありますな。皆さんの参考になったならば最高であります!
最新情報をチェックしよう!