Нужно получить список заданий планировщика плюс всю инфу по заданиям: когда, кто и зачем К моему большому сожалению, класс WMI Win32_ScheduledJob не работает с заданиями созданными не им. То есть через UI или еще как то.
Знаю, что в семерке это дело вроде в реестре есть,
но нужен универсальный способ - чтобы и для XP работал.
Получать вывод от schtasks.exe - тоже не выход: там нет инфы по исполняемому файлу и прочим данным.
PS: CCleaner и иже с ними как то ведь эти задания видят... Интересно, откуда они их считывают?
Добавлено:
Недоглядел, что SchTasks, оказывается, может выдавать более подробную инфу:
. В принципе, если все это распарсить - будет достаточно.
PS:Тему пока не закрываю - может кто знает как это делается через COM API.
Добавлено:
Нарыл в msdn API для заданий - для семерки используется интерфейс ITaskService
и для обращения к нему синтаксис "Schedule.Service", а для XP ITaskScheduler. Но синтаксис для обращения к последнему интерфейсу я так и не нашел.
Поэтому пока накропал вот это - для семерки, но сам проверить не могу, так как сижу на Хрюше
Просьба - у кого на компе семерка, если не трудно, проверьте пожалуйста этот код.
Знаю, что в семерке это дело вроде в реестре есть,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Schedule\TaskCache\Tasks\{GUID}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SchedulingAgent
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SchedulingAgent
Получать вывод от schtasks.exe - тоже не выход: там нет инфы по исполняемому файлу и прочим данным.
PS: CCleaner и иже с ними как то ведь эти задания видят... Интересно, откуда они их считывают?
Добавлено:
Сообщение автоматически объединено:
Недоглядел, что SchTasks, оказывается, может выдавать более подробную инфу:
Код:
SchTasks /Query /V /FO LIST
PS:Тему пока не закрываю - может кто знает как это делается через COM API.
Добавлено:
Сообщение автоматически объединено:
Нарыл в msdn API для заданий - для семерки используется интерфейс ITaskService
и для обращения к нему синтаксис "Schedule.Service", а для XP ITaskScheduler. Но синтаксис для обращения к последнему интерфейсу я так и не нашел.
Поэтому пока накропал вот это - для семерки, но сам проверить не могу, так как сижу на Хрюше
Просьба - у кого на компе семерка, если не трудно, проверьте пожалуйста этот код.
Код:
Local $objTaskService,$objRootFolder,$objTasks
$objTaskService = ObjCreate("Schedule.Service")
$objRootFolder = $objTaskService.GetFolder(""); получаем папку заданий
$objTasks = $objRootFolder.GetTasks(0); получаем коллекцию объектов заданий
For $task in $objTasks
ConsoleWrite($task.Definition.Settings.WakeToRun&@CRLF)
ConsoleWrite($task.Definition.Settings.Enabled&@CRLF)
ConsoleWrite($task.Definition.Settings.Hidden&@CRLF)
ConsoleWrite($task.Definition.Principal.LogonType&@CRLF)
ConsoleWrite($task.Definition.Principal.UserId&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Author&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Date&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Description&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.SecurityDescriptor&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Version&@CRLF)
ConsoleWrite($task.RunningTask.EnginePID&@CRLF)
ConsoleWrite($task.RunningTask.Name&@CRLF)
ConsoleWrite($task.RunningTask.Path&@CRLF)
ConsoleWrite($task.RunningTask.State&@CRLF)
ConsoleWrite($task.RunningTask.CurrentAction&@CRLF)
ConsoleWrite($task.Name&@CRLF)
ConsoleWrite($task.Path&@CRLF)
Next
$objTasks = $objTaskService.GetRunningTasks(); получаем коллекцию запущенных заданий
For $task in $objTasks
ConsoleWrite($task.Definition.Settings.WakeToRun&@CRLF)
ConsoleWrite($task.Definition.Settings.Enabled&@CRLF)
ConsoleWrite($task.Definition.Settings.Hidden&@CRLF)
ConsoleWrite($task.Definition.Principal.LogonType&@CRLF)
ConsoleWrite($task.Definition.Principal.UserId&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Author&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Date&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Description&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.SecurityDescriptor&@CRLF)
ConsoleWrite($task.Definition.RegistrationInfo.Version&@CRLF)
ConsoleWrite($task.RunningTask.EnginePID&@CRLF)
ConsoleWrite($task.RunningTask.Name&@CRLF)
ConsoleWrite($task.RunningTask.Path&@CRLF)
ConsoleWrite($task.RunningTask.State&@CRLF)
ConsoleWrite($task.RunningTask.CurrentAction&@CRLF)
ConsoleWrite($task.Name&@CRLF)
ConsoleWrite($task.Path&@CRLF)
Next