本連載は、Windows PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Register-ScheduledTask」コマンドレットです。
本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、「タスクスケジューラ」で実行するタスクを作成するための「Register-ScheduledTask」コマンドレットを解説します。
「Register-ScheduledTask」は、Windows PowerShellを利用して「タスクスケジューラ」で新しいタスクを作成するためのコマンドレットです。
前回(New-ScheduledTaskActionコマンドレット――タスクスケジューラで実行するアクションを作成する)も紹介しましたが、PowerShellでタスクスケジューラの新しいタスクを作成する場合は、次の3つを指定する必要があります。
このとき、タスクを実行するための「条件(New-ScheduledTaskTrigger)」と、実行する「アクション(New-ScheduledTaskAction)」で指定した内容を利用して新しいタスクを作成するのが、今回紹介するRegister-ScheduledTaskコマンドレットです。なお、New-ScheduledTaskTriggerとNew-ScheduledTaskActionについては、本連載第11回と第12回を参考にしてください。
Register-ScheduledTaskコマンドレットの主なオプションは次の通りです。
オプション | 意味 |
---|---|
-TaskName | タスクの名前を指定する |
-Action | タスク実行時に実行するプログラムを指定する |
-Trigger | タスクを実行する条件を指定する。省略可能 |
-TaskPath | 作成したタスクの保存場所を指定する。省略可能 |
-User | タスクを実行するユーザーを指定する。省略可能 |
-Password | タスクを実行するユーザーのパスワードを指定する。省略可能 |
タスクスケジューラを利用して、「毎週金曜日の午後5時にシステム情報をファイルに格納する」場合、あらかじめ第11回で紹介した「毎週金曜日の午後5時に実行する」コマンドレットと、第12回で紹介した「システム情報をファイルに格納する」コマンドレットをそれぞれ実行し、その実行結果を用いてRegister-ScheduledTaskコマンドレットを実行します。
$task=New-ScheduledTaskAction -Execute "msinfo32.exe" -Argument "/report C:\Report\msinfo.txt" -WorkingDirectory "C:\Report" $trigger=New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 5pm Register-ScheduledTask -TaskName "GenerateReport" -Trigger $trigger -Action $task
上記のコマンドレット実行例では、1行目で「システム情報をファイルに格納する」コマンドレット、2行目で「毎週金曜日の午後5時に実行する」コマンドレットを実行しています。また、1行目の内容は$task変数に、2行目の内容は$trigger変数にそれぞれ保存しています。
そして3行目でRegister-ScheduledTaskコマンドレットを実行し、1行目と2行目の内容を組み合わせて実行するように設定しています(画面1)。
3行目のRegister-ScheduledTaskコマンドレットでは、「-TaskName」オプションの後にタスクの名前、「-Action」オプションの後に1行目の内容($task変数)、「-Trigger」オプションの後に2行目の内容($trigger変数)をそれぞれ指定しています。
タスクスケジューラを利用して「ログオン時に管理者権限でPowerShellを起動する」場合は、あらかじめ第11回で紹介した「ログオン時に実行する」コマンドレットと、第12回で紹介した「PowerShellを起動する」コマンドレットをそれぞれ実行し、その実行結果を用いてRegister-ScheduledTaskコマンドレットを実行します。
$task=New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-Command Remove-Item c:\temp\*.*" $trigger=New-ScheduledTaskTrigger -AtLogon Register-ScheduledTask -TaskName "CleanUpTempFolder" -Trigger $trigger -Action $task -User "System"
上記のコマンドレット実行例では、1行目で「PowerShellを起動して、c:\tempフォルダ内のファイルを全て削除する」コマンドレット、2行目で「毎週金曜日の午後5時に実行する」コマンドレットを実行しています。また、1行目の内容は$task変数に、2行目の内容は$trigger変数にそれぞれ保存しています。
そして3行目でRegister-ScheduledTaskコマンドレットを実行し、1行目と2行目の内容を組み合わせて実行するように設定しています(画面2)。
3行目のRegister-ScheduledTaskコマンドレットでは、「-TaskName」オプションの後にタスクの名前、「-Action」オプションの後に1行目の内容($task変数)、「-Trigger」オプションの後に2行目の内容($trigger変数)をそれぞれ指定しています。
その他、「-User」オプションで、タスク実行時に使用するユーザーとして「System」アカウントを指定します。Systemアカウントは管理者権限を持つアカウントで、Register-ScheduledTaskコマンドレットの中で使用する場合はパスワードの指定を必要としません。「Administrator」などの管理者ユーザーを「-User」オプションで指定するときは、「-Password」オプションでユーザーのパスワードを併せて指定する必要があります。
前項で紹介した「ログオン時に管理者権限でPowerShellを起動する」タスクを、今度はタスクスケジューラ内の特定のフォルダに保存するように設定してみましょう。
$task=New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-Command Remove-Item c:\temp\*.*" $trigger=New-ScheduledTaskTrigger -AtLogon Register-ScheduledTask -TaskName "CleanUpTempFolder" -Trigger $trigger -Action $task -User "System" -TaskPath \UserDefined
前項で紹介したタスクと全く同じですが、異なるのは「-TaskPath」オプションを指定している点です。「-TaskPath」オプションを指定すると、タスクスケジューラ内にフォルダを作成し、その中にタスクを作成します(画面3)。
このコマンドレット実行例では、「-TaskPath」オプションで「\UserDefined」と指定しており、タスクスケジューラのルート(¥)の下に「UserDefined」という名前のフォルダを作成し、その中にタスクを登録するように指定しています、画面4)。
株式会社ソフィアネットワーク取締役。1997年よりマイクロソフト認定トレーナーとして、Active DirectoryやActive Directoryフェデレーションサービス(AD FS)など、ID管理を中心としたトレーニングを提供している。2007年よりMicrosoft MVP for Directory Servicesを連続して受賞。なお、テストで作成するユーザーアカウントには必ずサッカー選手の名前が登場するほどのサッカー好き。
Copyright © ITmedia, Inc. All Rights Reserved.