PowerShellスクリプトファイルとタスクスケジューラーを組み合わせれば、Windows環境での複雑な定型業務を自動化できる。ただ、タスク登録時のプログラムパスの指定に気を付けないと、予期せぬトラブルが生じることがある。
対象ソフトウェア:Windows 7/Windows 8/Windows 8.1/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2、PowerShell
Windowsでちょっと複雑な処理を自動的に実行するには、バッチファイルの代わりにPowerShellが利用できる。一連の処理をPowerShellの書式で記述して.ps1ファイル(PowerShellスクリプトファイル)に保存しておけば、いつでも簡単に同じ処理を実行できるようになる。PowerShellの基本的な使い方については、右上の関連記事を参照していただきたい。
このPowerShellスクリプトファイルをWindowsのタスクスケジューラーと組み合わせれば、バッチでは難しかった複雑な定型業務を定期的に繰り返し実行する、といった自動化を実現しやすくなる。しかも、どちらの機能も無償で利用できる。活用しない手はないだろう(基本的なタスク作成の手順については、右上の関連記事を参照していただきたい)。
ただ、タスクスケジューラーのタスクとしてPowerShellスクリプトファイルを実行する場合、特に注意すべき点がある。それは実行時のカレントフォルダーを指定しても、別のフォルダーで起動してしまうという現象だ。本稿では、このトラブル対策と併せて、PowerShellスクリプトファイルのタスク作成時のポイントを説明する。
PowerShellスクリプトファイルをタスクスケジューラーで繰り返し実行するには、そのスクリプトファイルをタスクとして登録する必要がある。そのタスクの作成手順は、「一部」を除いて次のTIPSで説明している手順と共通だ。
異なっている「一部」とは、実行するプログラム/スクリプトの指定方法だ。タスクスケジューラーのGUIでは、以下の画面やダイアログにその設定項目がある。
そこで以下の内容を各設定項目に記入する。
設定項目名 | 内容 |
---|---|
プログラム/スクリプト | %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe |
引数の追加 | -Command "<.ps1ファイルのパス> <.ps1に必要なパラメーター>" *カレントフォルダー内に存在する.ps1ファイルを指定する場合は、「.\<.ps1ファイル名>」とする(先頭に「.\」を付ける)。そうでない場合はフルパス名で指定する |
開始 | <このスクリプトが実行されるときのカレントフォルダー名> *省略すると「%SystemRoot%\System32」がカレントフォルダーになる *ダブルクオート(二重引用符)でくくらないこと |
PowerShellスクリプトファイルのタスクで設定すべき項目 |
ポイントは[プログラム/スクリプト]に、PowerShellの実行ファイルである「powershell.exe」のフルパス名を記入することだ。単に「powershell.exe」と指定すると、.ps1ファイル自体は起動されるものの、「開始」で指定したフォルダーではなく別のフォルダー(%SystemRoot%\System32)が実行中のスクリプト(タスク)にとっての「カレントフォルダー」になってしまう。
また、タスクの「カレントフォルダー」([開始]で指定する場所)に存在する.ps1ファイルを実行する場合は、[引数の追加]で、「-Command ".\automation.ps1"」というように、カレントフォルダーを表す「.\」をパスの先頭に指定すること。省略するとエラーになってしまう。カレントフォルダー以外に存在する場合は、フルパス名で指定する。
ウィザードを使わずにタスクを作成する際に、プログラムのパスなどを設定する手順を以下に記す。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.