Home > Windows にまつわる e.t.c.

PowerShellでタスクスケジュール登録


Hyper-V Server 2012 R2/Windows Server 2012 R2の タスクスケジュールはPowerShellコマンドレットで操作ができるので、schtasks.exeを使う必要は基本無いのです。

のハズでしたが....  色々試行錯誤しても月単位のタスクがうまく作れなかったので、月単位のタスク作成はschtasks.exeを使うしかなさそうです。

コマンドレッドの確認

まずは、タスクスケジュールのコマンドレットにはどんなものがあるのかチェックしましょう。

PS C:\> Get-Command | ? Name -match "ScheduledTask"
CommandType Name ModuleName
-----------       ---- ----------
Function           
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Function
Disable-ScheduledTask
Enable-ScheduledTask
Export-ScheduledTask
Get-ClusteredScheduledTask
Get-ScheduledTask
Get-ScheduledTaskInfo
New-ScheduledTask
New-ScheduledTaskAction
New-ScheduledTaskPrincipal
New-ScheduledTaskSettingsSet
New-ScheduledTaskTrigger
Register-ClusteredScheduledTask
Register-ScheduledTask
Set-ClusteredScheduledTask
Set-ScheduledTask
Start-ScheduledTask
Stop-ScheduledTask
Unregister-ClusteredScheduledTask       
Unregister-ScheduledTask
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks
ScheduledTasks

 

タスク取得

タスク取得は、「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

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.