Назад | Перейти на главную страницу

Как мне использовать PowerShell, чтобы узнать, какие задания не удалось выполнить в течение последних 24 часов?

DBA долгое время, но плохо знаком с PowerShell. Я хочу использовать PowerShell, чтобы просмотреть несколько экземпляров SQL Server и выяснить, какие задания не удалось выполнить за последние 24 часа. Мне нужно знать о сбоях, даже если впоследствии задание было выполнено успешно. Сейчас я просто хочу, чтобы он работал на одном сервере, а затем я перейду на несколько серверов.

То, что у меня есть до сих пор, позволяет мне перебирать все задания, но я не уверен, что делать, чтобы получить статусы выполнения за последние 24 часа:

$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" "localhost"

$jobs = $srv.JobServer.Jobs

foreach ($job in $jobs)
{
    $jobHistory = $job.EnumHistory()
}

Любая помощь будет оценена. Я с нетерпением жду возможности больше познакомиться с PowerShell, но сейчас некоторые из SMO немного сбивают с толку.

Спасибо, Дэн

Следующий код не протестирован, но я думаю, он должен работать.

$jobs = $srv.JobServer.Jobs

$jhf = New-Object Microsoft.SqlServer.Management.Smo.Agent.JobHistoryFilter
$jhf.OutcomeTypes = [Microsoft.SqlServer.Management.Smo.Agent.CompletionResult]::Failed

foreach ($job in $jobs)
{
    foreach ($jobRun in $job.EnumHistory($jhf) | where {$_.RunDate -gt ((Get-Date).AddDays(-1))})
    {
        $jobRun
    }
}

РЕДАКТИРОВАТЬ: Я немного изменил свой после игры с кодом Шона. Мне больше нравится его метод доступа к RunDate.

Если вы используете SQL Server 2008 или новее с SQLPS, вы можете просто использовать эту строку кода (разбитую для удобства чтения): \

РЕДАКТИРОВАТЬ: Исправлен код для использования EnumHistory, как это делает @pk, но в SQLPS. Так что просто альтернативный способ сделать это.


dir SQLSERVER:\SQL\ServerName\DEFAULT\JobServer\Jobs | foreach {$_.EnumHistory()} | 
   where {$_.RunStatus -eq 0} | where {$_.RunDate -gt ((Get-Date).AddDays(-1))}

Если вы используете SQL 2005, вы можете установить SQL Server 2008 R2 SQLPS на сервере. Microsoft сделала его распространяемым пакетом. Чад Миллер написал хороший Сообщение блога на нем и обеспечивает загрузку модуля.