如何使用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有点混乱。

谢谢,丹

下面的代码是未经testing的,但我认为它应该工作。

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

编辑:我玩了Shawn的代码后,我改了一下。 我喜欢他更好地访问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。 微软把它变成了一个可再发行的软件包。 乍得米勒写了一个很好的博客文章 ,并提供了该模块的下载。