背景:
阅读新闻

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
来源:https://www.vwnet.jp/Windows/HS12R2/Schdule/Task.htm
录入日期:[2019/05/29 13:20:00]
收藏 推荐 打印 | 录入:mikebai | 阅读:
文章评论      
正在加载评论列表...
评论关闭