Сбор запланированных заданий средствами PowerShell
Запланированные задания. Казалось, что может быть проще..?
Есть утилита schtasks.exe, она умеет собирать, создавать и удалять задания. Пишем
schtasks.exe /?
и далее по обстоятельствам, вернее по необходимости.
Однако не все так просто как кажется. При наличии десятка серверов все кажется простым и понятным, но при наличии 500 и более серверов задача слегка усложняется. Вполне возможно что на рабочих станциях включен планировщик и вам необходимо собрать данные по запланированному заданию которое вы назначили через GPP, как пример можно привести задачу по развертыванию FEP 2010.
Примечание: Вопрос управления заданиями уже обсуждался, но это не мешает нам к нему вернуться.
Простой метод сбора информации о запланированных заданий приведен ниже. Скрипт формирует CSV файл который потом замечательно можно проанализировать в Excel.
Add-PSSnapin Quest.ActiveRoles.ADManagement
# задаем нужный OU
$OU = ‘Domain/Members Servers’
# указываем имя файла отчета
$reportFile = "report.txt"
$servers = Get-QADComputer -SearchRoot $OU -SearchScope Subtree
foreach ($server in $servers) {
Write-Host $server.dnshostname
$tasks = schtasks.exe /Query /FO CSV /v /s $server.dnshostname
$tasks | ft HostName,TaskName,"Last Run Time" | Out-File -NoClobber -Append $reportFile
# если нет задачи выводить информацию в файл, а сразу получать результат на экран то можно
# сделать следующим образом.
# $tasks | ConvertFrom-Csv | ft HostName,TaskName,"Last Run Time"
}
PS Как мне правильно заметили эта публикация является модификацией более старой статьи.
Похожие статьи
Вы можете оставить комментарий.



$tasks | ft HostName,TaskName,»Last Run Time» – правильнее будет(т.к получим тоже самое,что и в $tasks),
$tasks | ConvertFrom-Csv | ft HostName,TaskName,»Last Run Time»
KazunЦитировать
Спасибо.
Сергей МариничевЦитировать
Я может не совсем понятно выразился,но:
$tasks | ft HostName,TaskName,»Last Run Time» – Либо здесь не надо вообще использовать Format-Table,т.к он не знает из чего извлекать данные свойства,их нет просто текст.
Либо сначала применить ConvertFrom-Csv с последующим извлечением нужных свойств и записи в файл.
KazunЦитировать
Согласен, FT лишнее, однако на выходе совершенно нормальный CSV файл.
Сергей МариничевЦитировать
Наглядный пример:
PS > $tasks | ft HostName,TaskName,»Last Run Time» | select -f 1
«HostName»,»TaskName»,»Next Run Time»,»Status»,»Logon Mode»,»Last Run Time»,»Last Result»,»Author»,»Task To Run»,»Start
In»,»Comment»,»Scheduled Task State»,»Idle Time»,»Power Management»,»Run As User»,»Delete Task If Not Rescheduled»,»St
op Task If Runs X Hours and X Mins»,»Schedule»,»Schedule Type»,»Start Time»,»Start Date»,»End Date»,»Days»,»Months»,»Re
peat: Every»,»Repeat: Until: Time»,»Repeat: Until: Duration»,»Repeat: Stop If Still Running»
PS > $tasks | select -f 1
«HostName»,»TaskName»,»Next Run Time»,»Status»,»Logon Mode»,»Last Run Time»,»Last Result»,»Author»,»Task To Run»,»Start
In»,»Comment»,»Scheduled Task State»,»Idle Time»,»Power Management»,»Run As User»,»Delete Task If Not Rescheduled»,»St
op Task If Runs X Hours and X Mins»,»Schedule»,»Schedule Type»,»Start Time»,»Start Date»,»End Date»,»Days»,»Months»,»Re
peat: Every»,»Repeat: Until: Time»,»Repeat: Until: Duration»,»Repeat: Stop If Still Running»
KazunЦитировать
Дело в том что
ConvertFrom-Csv | Select HostName,TaskName,»Last Run Time»
Выдаст не совсем то что требуется, а изначально требуется CSV файл который можно пихнуть в Excel.
Можно добавить фильтр на проверку пустой строки…
Сергей МариничевЦитировать
Когда $tasks | ft HostName,TaskName,»Last Run Time» ,я не думаю что всем будет легко понять,что имел ввиду автор. Т.е сохранить полный результат в файл CSV и дальше обрабатывать или все же получить заданные свойства и только их записать в файл.Да хорошо,что здесь не возникло проблем,а так могут.
KazunЦитировать