Como uso o PowerShell para descobrir quais tarefas falharam nas últimas 24 horas?

4

DBA de longo prazo, mas novo no PowerShell. Eu estou olhando para usar o PowerShell para percorrer várias instâncias do SQL Server e descobrir quais tarefas falharam nas últimas 24 horas. Preciso saber falhas mesmo que o trabalho tenha sido executado com sucesso depois. No momento, eu só quero que ele funcione em um servidor, e depois vou para vários servidores.

O que eu tenho até agora me permite percorrer todos os trabalhos, mas não tenho certeza do que fazer para obter os status de execução nas últimas 24 horas:

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

$jobs = $srv.JobServer.Jobs

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

Qualquer ajuda seria apreciada. Estou ansioso para entrar no PowerShell mais, mas agora, alguns dos SMO é um pouco confuso.

Obrigado Dan

    
por SQL3D 21.09.2011 / 23:42

2 respostas

2

O código a seguir não foi testado, mas acho que deve funcionar.

$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
    }
}

EDIT: Eu mudei o meu um pouco depois de brincar com o código de Shawn. Eu gosto de seu método de acessar melhor o RunDate.

    
por 22.09.2011 / 00:19
1

Se você estiver usando o SQL Server 2008 ou superior com o SQLPS, basta usar essa linha de código (dividida para legibilidade): \

EDIT : Código corrigido para usar o EnumHistory como @pk, mas dentro do SQLPS. Então, apenas uma maneira alternativa de fazer isso.


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

Se você estiver executando o SQL 2005, poderá instalar o SQL Server SQL Server 2008 R2 no servidor. A Microsoft tornou um pacote redistribuível. Chad Miller escreveu uma boa postagem no blog e oferece um download para o módulo.

    
por 22.09.2011 / 15:15