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 сделала его распространяемым пакетом. Чад Миллер написал хороший Сообщение блога на нем и обеспечивает загрузку модуля.