长时间的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。 微软把它变成了一个可再发行的软件包。 乍得米勒写了一个很好的博客文章 ,并提供了该模块的下载。