syg_hira's tech-work memo

某人材サービス会社の情報共有インフラ担当のおぼえがきです。MicrosoftのEnterprise製品多め。

タスク(タスクスケジューラ)を、PowerShellで実行する(修正版)

#Run Registerd Task
$TaskService = New-Object -ComObject Schedule.Service
$TaskService.Connect('ServerName')
$RootFolder = $TaskService.GetFolder('\')
$Task=$RootFolder.GetTask('TaskName')
$Task.Run(1)

#wait for task termination
do
{
write-host "Running"
start-sleep -Seconds 2 
}until($task.state -ne 4)

#Eval Result
if($task.LastTaskResult -eq 0)
{
write-host "Success"
exit 0
}
else
{
write-host "Fail"
exit 0
}

コマンドで実行するなら

schtasks /RUN /S <サーバー名> /TN <タスク名>

だが、コマンドは実行トリガーを発行した時点で終了してしまう。

ステータスと処理結果は、schtasks /Query の繰り返しで取得することもできるが、プロンプトの書式をいちいちパースするのはスマートではない。TaskServiceをハンドリングする方がEasy。