Hyper-V Server 2012 R2/Windows Server 2012 R2の タスクスケジュールはPowerShellコマンドレットで操作ができるので、schtasks.exeを使う必要は基本無いのです。
のハズでしたが.... 色々試行錯誤しても月単位のタスクがうまく作れなかったので、月単位のタスク作成はschtasks.exeを使うしかなさそうです。
まずは、タスクスケジュールのコマンドレットにはどんなものがあるのかチェックしましょう。
PS C:\> Get-Command | ? Name -match "ScheduledTask"
|
タスク取得は、「Get-ScheduledTask」です。
「?」で普通に絞ることが出来ますが、-TaskName、-TaskPathでタスク絞り込みが出来ます。
タスク登録は、「Register-ScheduledTask」で登録します。
こいつの引数は、案の定大量にあって、代表的なパラメーターだけでもこんな感じになっています。
Register-ScheduledTask -TaskPath "\Mura\AutoDefrag\" -TaskName "Auto Defrag" -User "SYSTEM" -RunLevel Highest -Trigger $Trigger -Action $Action |
代表的なパラメーターは以下の通り。
-TaskPath | タスク階層 |
-TaskName | タスク名 |
-User | 実行アカウント |
-Password | システムアカウント以外はパスワードが必要 |
-RunLevel | Highest:最上位特権実行 Limited:限定実行(-not 最上位特権実行) |
-Trigger | トリガー |
-Action | 操作 |
トリガーと操作は、引数がさらに階層化されています。
-Triggerに渡すパラメーターは「New-ScheduledTaskTrigger」で作ります。
オプションの組み合わせでトリガーが決まるので、代表的な組み合わせを紹介します。
指定日時に1回だけ実行
$Trigger = New-ScheduledTaskTrigger -Once -at "2014/07/02 23:30:00" |
15分毎無期限実行
$Trigger = New-ScheduledTaskTrigger -Once -at "00:00:00" -RepetitionInterval "00:15:00" -RepetitionDuration ([timespan]::MaxValue) |
毎日 03:00 実行
$Trigger = New-ScheduledTaskTrigger -Daily -at "03:00:00" |
毎週 日曜日と金曜日の 03:00 実行
$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday,Friday -At "03:00:00" |
開始時刻を散らす場合は-RandomDelayを指定します。
$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday,Friday -At "03:00:00" -RandomDelay "01:00:00" |
残念ながら、PowerShellでは月単位のスケジュールはできないようです。
-Actionに渡すパラメーターは「New-ScheduledTaskAction」で作成します。代表的なパラメーターは以下の通りです。
-Execute | 実行するプログラム |
-Arguments | 引数 |
例)
$Action = New-ScheduledTaskAction -Execute "C:\Windows\System32\Defrag.exe" -Argument "/c /o" |
タスクの有効/無効は「Enable-ScheduledTask」、「Disable-ScheduledTask」です。
# タスク有効 Get-ScheduledTask -TaskName "Auto Defrag" | Enable-ScheduledTask # タスク無効 Get-ScheduledTask -TaskName "Auto Defrag" | Disable-ScheduledTask |
タスクの実行/停止は「Start-ScheduledTask」、「Stop-ScheduledTask」です。
# タスク実行 Get-ScheduledTask -TaskName "Auto Defrag" | Start-ScheduledTask # タスク停止 Get-ScheduledTask -TaskName "Auto Defrag" | Stop-ScheduledTask |
タスク更新である「Set-ScheduledTask」は、なぜかGet-ScheduledTaskのパイプ渡しを受け付けないので、-TaskPath、 -TaskNameでタスクを指定し、更新するパラメーターを渡します。
# タスク更新 Set-ScheduledTask -TaskPath "\Mura\AutoDefrag\" -TaskName "Auto Defrag" -Action $Action |
Register-ScheduledTaskを-Forceで実行しても上書きできます。
タスク削除は「Unregister-ScheduledTask」で削除します。
Unregister-ScheduledTaskは確認入力を求めるので、無条件削除する場合は「-Confirm:$false」を指定しますが、Unregister-ScheduledTaskをタスク指定なしで実行すると、OS標準タスクを含む全タスクが問答無用に削除されます(検証環境でやっちまいましたww)
-Confirm:$falseを運用環境でやるときは、くれぐれも慎重に操作しないと泣く事になりますので注意してください。
# タスク削除 Get-ScheduledTask -TaskName "Auto Defrag" | Unregister-ScheduledTask |
Hyper-V server 2012 R2 の目次に戻る
http://www.vwnet.jp/Windows/etc.asp#Hyper-V_server_2012_R2
Copyright © MURA All rights reserved.