Найти в Дзене
Alex Tsytsarev

Определяем в какое время запускаются задачи из планировщика с помощью PowerShell.

После подключения нового сервера к системе мониторинга я обнаружил, что каждую ночь около 04:00 часов возникает значительная загрузка процессора.
Свой скрипт я настроил на запуск в 23:00, поэтому нагрузка в 4 утра меня несколько смутила. Были у меня предположения, что это скорее всего либо антивирус проверки делает, либо нагрузка связана с обновлениями. Нужно было точно определить, что за задача отрабатывает в это время. Определить список всех достаточно просто, с помощью командлета Get-ScheduledTask. Однако определить время следующего запуска, оказалась не такая тривиальная задача.
Для получения времени запуска задачи по поиску обновлений, необходимо провалиться в .Triggers.StartBoundary , а иногда ещё глубже. Но для поиска моей задачи этого было достаточно.
Я написал скрипт, которым и хотел бы поделиться.
Clear-Host
$Array = @()
$Tasks = Get-ScheduledTask
$logFile = "D:\work\tasks.csv"
$Tasks | ForEach-Object {
$Data = [PSCustomObject]@{
TaskName = $_.TaskName

После подключения нового сервера к системе мониторинга я обнаружил, что каждую ночь около 04:00 часов возникает значительная загрузка процессора.
Свой скрипт я настроил на запуск в 23:00, поэтому нагрузка в 4 утра меня несколько смутила.

-2

Были у меня предположения, что это скорее всего либо антивирус проверки делает, либо нагрузка связана с обновлениями. Нужно было точно определить, что за задача отрабатывает в это время. Определить список всех достаточно просто, с помощью командлета Get-ScheduledTask. Однако определить время следующего запуска, оказалась не такая тривиальная задача.
Для получения времени запуска задачи по поиску обновлений, необходимо провалиться в
.Triggers.StartBoundary , а иногда ещё глубже. Но для поиска моей задачи этого было достаточно.
Я написал скрипт, которым и хотел бы поделиться.

Clear-Host

$Array = @()
$Tasks = Get-ScheduledTask
$logFile = "D:\work\tasks.csv"

$Tasks | ForEach-Object {

$Data = [PSCustomObject]@{
TaskName = $_.TaskName
State = $_.state
Triger = $_.Triggers.StartBoundary -replace "\u002B"," " -replace "T"," " -replace "-","."
TaskPath = $_.TaskPath
}

$Array = $Array + @($Data)
}

$Array | Sort-Object Triger -Descending
$Array | Export-Csv -Path $logFile -Delimiter ';' -NoTypeInformation -Encoding UTF8 -Force

Цикл ForEach и PSCustomObject я использовал, чтобы вытащить нужную мне информацию без лишней воды. Массив $Array пришлось добавить, чтобы было проще отфильтровать задачи по времени. Ну и в конце я добавил выгрузку в csv файл, чтобы было проще анализировать информацию в Excel.