如何使用PowerShell获取SQL Server所有作业的最新执行结果?
获取所有SQL Server作业的最新执行结果
可以通过调整PowerShell命令或直接查询SQL系统表的方式,获取每个作业的最新执行记录,不受运行时间限制。以下是两种实用方法:
方法一:PowerShell分组筛选
先拉取所有作业的历史记录,再按作业名称分组,每组仅保留最新的一条执行记录:
Get-SqlAgentJobHistory -ServerInstance "PADB1" | Group-Object -Property JobName | ForEach-Object { $_.Group | Sort-Object -Property RunDate, RunTime -Descending | Select-Object -First 1 }
如果只想筛选出最新结果为失败的作业,可在末尾添加过滤条件:
Get-SqlAgentJobHistory -ServerInstance "PADB1" | Group-Object -Property JobName | ForEach-Object { $_.Group | Sort-Object -Property RunDate, RunTime -Descending | Select-Object -First 1 } | Where-Object { $_.RunStatus -eq 0 } # RunStatus=0对应失败状态
方法二:直接查询SQL系统表
若追求更高效率,可直接连接SQL Server查询系统表msdb.dbo.sysjobhistory,通过窗口函数快速定位每个作业的最新记录:
SELECT j.name AS JobName, h.run_date, h.run_time, CASE h.run_status WHEN 0 THEN '失败' WHEN 1 THEN '成功' WHEN 2 THEN '重试' WHEN 3 THEN '取消' WHEN 4 THEN '正在运行' END AS RunStatus, h.message FROM msdb.dbo.sysjobhistory h JOIN msdb.dbo.sysjobs j ON h.job_id = j.job_id WHERE h.instance_id IN ( SELECT MAX(instance_id) FROM msdb.dbo.sysjobhistory GROUP BY job_id ) ORDER BY j.name
该查询会返回每个作业的最新执行日期、时间、状态及执行消息,结果清晰直观。
补充:
Get-SqlAgentJobHistory的RunStatus属性对应值:0=失败,1=成功,2=重试,3=取消,4=正在运行,可按需调整筛选逻辑。
内容的提问来源于stack exchange,提问作者MartMX
相关产品推荐
相关产品推荐

