Windows Server - планировщик задач - показывает, какое действие выполняется - PullRequest
0 голосов
/ 28 августа 2018

ОС - Windows Server 2012

У меня запланированное задание с 31 действием. Каждое действие запускает отдельный скрипт Powershell. Если один из сценариев действий / Powershell застрял, я хочу знать, какой это, поэтому я знаю, какой из них может иметь проблему с кодированием.

Есть ли способ указать, какое действие заканчивается из 31? Есть ли скрипт Powershell, который я могу запустить, где я ввожу имя запланированной задачи, и он будет возвращать что-то вроде «Обработка 18 или 31 действий»?

Что добавить в этот скрипт:

Get-ScheduledTask |where TaskName -EQ 'Inventory_Part3'| Get-ScheduledTaskInfo 

1 Ответ

0 голосов
/ 29 августа 2018
  1. Если процесс powershell.exe «завис», как при работе, вы можете найти действие с помощью имени сценария, переданного процессу PowerShell.exe системой планирования задач.

    Вам нужно будет использовать Get-WMIObject -ClassName Win32_Process для доступа к аргументам, передаваемым процессу, как объяснено в ответах на этот вопрос

  2. Ответы на этот вопрос указывают, где в журнале событий Windows хранится история операций планировщика задач. Записи журнала действий могут быть доступны и фильтроваться вашим собственным сценарием powershell.

  3. Объекты WMI / CIM более низкого уровня могут содержать больше информации, чем та, которую предоставляют командлеты *-ScheduledTask. Вы можете исследовать такие классы, как MSFT_ScheduledTask и MSFT_TaskAction с Get-CimClass.

    На первый взгляд не похоже, что существует какой-либо атрибут CurrentAction, но дальнейшее копание может найти что-то полезное.

Текущий статус ваших задач должен быть виден через Schedule.Service COM-объект. К сожалению, сейчас я ограничен Linux, поэтому у меня нет доступа к тестовой среде.

широкими мазками:

  1. Вот примеры vbscript запроса службы планировщика заданий здесь . Планировщик задач отображается как COM-объект Schedule.Service, которым PowerShell должен манипулировать.

  2. Объект TaskService имеет элемент GetRunningTasks , который должен вернуть вам коллекцию ...

  3. RunningTask объекты, имеющие свойство CurrentAction

Я подозреваю, что код будет выглядеть примерно так (но опять же, мне некуда тестировать):

$TaskScheduleService = New-Object -comobject 'Schedule.Service'
$TaskScheduleService.Connect()
$RunningTasks = $TaskScheduleService.GetRunningTasks()
$RunningTasks | Where-Object {<#some kind of filter to get only your tasks#>} |
    Foreach-Object {
        $_.CurrentAction
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...