使用 Powershell 从 SQL 代理作业中查找最后一步 运行

Using Powershell to find last step run from an SQL agent job

我有一个提供 SQL 代理作业信息的 powershell 脚本。该脚本旨在监视作业并告诉我它们上次 运行 是否失败。但是我也想知道 最后 运行 步骤 。我似乎不知道该怎么做。

我正在查询 Sql 服务器管理对象,因为它需要在多个远程服务器(远程连接)上可用,我希望避免 运行ning SQL 脚本。

请记住,我是 powershell 的新手。

这是我目前的代码:而且我已经加载了 SMO 库,只是没有显示复制的脚本。

## Get Jobstep Class SMO

Push-Location; Import-Module SQLPS -DisableNameChecking; Pop-Location;
$JobStep = New-Object microsoft.sqlserver.management.smo.agent.jobstep

## Run the select from the local SQL server management objects

$SQLSvr = "."
$MySQLObject = new-object Microsoft.SqlServer.Management.Smo.Server `
$SQLSvr;;

$Select = ($MySQLObject.JobServer.jobs) `
| Select  Name, isEnabled, `
lastRunDate, lastRunOutCome, NextRunDate  `
| Where-Object {$_.LastRunDate -ge ((Get-Date).adddays(-2)) } `
| ft -AutoSize;  

$Select

推送位置部分旨在为 select 作业步骤获取正确的 smo class(不确定是否正确),但我没有从中添加任何内容。

现在脚本可以正常工作,我没有收到任何错误,并且返回了我想要的全部信息,但我不知道如何添加作业步骤 - 我已经咨询了 google。我很清楚我需要向 select 添加更多内容,但这对我来说有什么问题。 那么,如何使用 SMO 从 SQL 代理作业中提取最后的 运行 作业步骤,并将其添加到上面的脚本中?

您可以使用 PowerShell 库 (Install-Module SqlServer) 中的 SqlServer 模块,然后使用类似的东西:

$h = Get-SqlAgentJobHistory -ServerInstance servername -JobName jobname

$h[0] 会给你最后一步 运行.

这将为您提供所需格式的结果:

Get-SqlAgentJob -ServerInstance servername | 
Where-Object {$_.LastRunDate -ge ((Get-Date).AddDays(-2))} | ForEach-Object {
    $h = Get-SqlAgentJobHistory -ServerInstance servername -JobName $_.Name
    [PSCustomObject]@{
        Name           = $_.Name
        IsEnabled      = $_.IsEnabled
        LastRunDate    = $_.LastRunDate
        LastRunOutcome = $_.LastRunOutcome
        NextRunDate    = $_.NextRunDate
        LastRunStep    = $h[0].StepName
    }
}