Приветствую,
уважаемый читатель!
Во
время расследования инцидентов безопасности бывает не лишним получить список заданий
в планировщике Windows.
Есть несколько способов как это можно сделать, в том числе с помощью графических
UI,
но мы рассмотрим консольные способы
получения заданий.
По
сложившейся традиции основным инструментом исследования будет PowerShell. Список заданий будем
получать с помощью:
- консольная утилита - SchTasks;
- командлеты PowerShell - Get-ScheduledTask и Get-ScheduledTaskInfo.
Утилита SchTasks
Данная
утилита является историческим способом получения заданий планировщика с
использованием CMD. Рассмотрим на примере:
SCHTASKS
/Query /FO TABLE /V > C:\Temp\Tasks1.txt
Данная команда получает
список всех запланированных заданий на компьютере в файл. Описание ключей:
/Query
– запросить задания;
/FO – формат вывода результата (TABLE, LIST, CSV);
/V
–
расширенный вывод информации о задании;
Get-ScheduledTask
и Get-ScheduledTaskInfo
Данные
командлеты позволяют получить базовую (Get-ScheduledTask)
и расширенную (Get-ScheduledTaskInfo)
информацию о заданиях в планировщике.
Get-ScheduledTask | Where
State -ne
"Disabled" | Get-ScheduledTaskInfo
Скрипт,
представленный ниже, позволяет объединить информацию из 2-х командлетов и получить
более подробную информацию:
function collect_scheduler
{
$path = "C:\Temp\Scheduler.csv";
$TaskCollection=@()
$Shedule_list =
Get-ScheduledTask |
Where State
-ne "Disabled"
foreach ($Task
in $Shedule_list)
{
foreach
($TaskInfo in
($Task |
Get-ScheduledTaskInfo)) {
$obj_task
= New-Object
psobject
$obj_task
| Add-Member
-type noteproperty
-name TaskPath
-Value $Task.TaskPath
$obj_task
| Add-Member
-type noteproperty
-name TaskName
-Value $Task.TaskName
$obj_task
| Add-Member
-type noteproperty
-name State
-Value $Task.State
$obj_task
| Add-Member
-type noteproperty
-name Author
-Value $Task.Author
$obj_task
| Add-Member
-type noteproperty
-name LastRunTime
-Value $TaskInfo.LastRunTime
$obj_task |
Add-Member -type
noteproperty -name
LastTaskResult -Value
$TaskInfo.LastTaskResult
$obj_task |
Add-Member -type
noteproperty -name
NextRunTime -Value $TaskInfo.NextRunTime
$TaskCollection += $obj_task
}
}
$TaskCollection
| Select-Object @{Name="Hostname";
Expression={$env:COMPUTERNAME}},TaskName,TaskPath,State,Author,LastRunTime,LastTaskResult,NextRunTime
| export-csv
-path $path
-UseCulture -Force
-NoTypeInformation -encoding
"UTF8"
}
Вывод скрипта:
Может кому пригодиться)
не работает скрипт
ОтветитьУдалитьfunction collect_scheduler {
$path = "C:\Temp\Scheduler.csv";
$TaskCollection=@()
$Shedule_list = Get-ScheduledTask | Where State -ne "Disabled"
foreach ($Task in $Shedule_list) {
foreach ($TaskInfo in ($Task | Get-ScheduledTaskInfo)) {
$obj_task = New-Object psobject
$obj_task | Add-Member -type noteproperty -name TaskPath -Value $Task.TaskPath
$obj_task | Add-Member -type noteproperty -name TaskName -Value $Task.TaskName
$obj_task | Add-Member -type noteproperty -name State -Value $Task.State
$obj_task | Add-Member -type noteproperty -name Author -Value $Task.Author
$obj_task | Add-Member -type noteproperty -name LastRunTime -Value $TaskInfo.LastRunTime
$obj_task | Add-Member -type noteproperty -name LastTaskResult -Value $TaskInfo.LastTaskResult
$obj_task | Add-Member -type noteproperty -name NextRunTime -Value $TaskInfo.NextRunTime
$TaskCollection += $obj_task
}
}
$TaskCollection | Select-Object @{Name="Hostname"; Expression={$env:COMPUTERNAME}},TaskName,TaskPath,State,Author,LastRunTime,LastTaskResult,NextRunTime | export-csv -path $path -UseCulture -Force -NoTypeInformation -encoding "UTF8"
}
В Windows 7 нет Get-ScheduledTask
ОтветитьУдалить