クライアントPC上でユーザ対話側のアプリケーションを強制的に起動させたいという要件がありまして、その起動方法としてタスクスケジューラにスクリプトからタスク登録する方法について調べてみました。
スクリプトからタスクを登録すると手動でタスクを登録した場合と異なり、Windows XP上ではタスクスケジューラからタスクの表示は出来ません。
※Windows Server 2003であれば編集は出来ませんが表示は可能です。
あまりに設定の方法がややこしかったのでTechNetを見ながらスクリプトにコメントを付けてみました。
'タスクスケジューラにタスクをスクリプトで登録 'Creating_Scheduled_Tasks Dim Command,StartTime,RunRepeatedly,DaysOfWeek,DaysOfMonth,InteractWithDesktop '実行するスクリプト ファイルまたは実行可能ファイルへのパス Command = "notepad" 'JOBを実行するためのUTC(協定世界時)です。 '日本で実行する場合には540分(9時間)を足します '記載方法はYYYYMMDDHHMMSS.MMMMMM(+-)OOOですが 'YYYYMMDDの部分は********に置き換える必要があります。 StartTime = "********204700.000000+540" 'スケジュール設定されたジョブを繰り返し実行するかどうかを示します。 '繰り返し実行する必要がある場合にはTrueを入力 RunRepeatedly = True DaysOfWeek = 1 OR 4 OR 16 'スケジュール設定されたジョブを実行する曜日 ' '1 - Monday ' '2 - Tuesday ' '4 - Wednesday ' '8 - Thursday ' '16 - Friday ' '32 - Saturday ' '64 - Sunday ' '曜日設定を複数入れた場合にはRunRepeatedlyをTrueにするのを忘れずに。 DaysOfMonth = "" 'ジョブを実行する月あたりの日数を指定します InteractWithDesktop = True 'スケジュール設定されたジョブが対話型で、ウィンドウを表示した状態で実行することを示します。 'このパラメータを False (既定の値) に設定すると、このスクリプトはウィンドウを表示しないで実行されます。 strComputer = "." Set objService = GetObject("winmgmts:\\" & strComputer) Set objNewJob = objService.Get("Win32_ScheduledJob") errJobCreated = objNewJob.Create (Command, StartTime, RunRepeatedly , DaysOfWeek , DaysOfMonth , InteractWithDesktop , JobID) If Err.Number = 0 Then Wscript.Echo "New Job ID: " & JobID Else Wscript.Echo "エラーが発生しました。: " & errJobCreated End If
参考
Creating Scheduled Tasks
Create Method of the Win32_ScheduledJob Class