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

时间:2018-10-15 13:03:03

标签: powershell smo

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

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

请记住,我是Powershell的新手。

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

@ApplicationPath("/api/v1")
public class App extends javax.ws.rs.core.Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(MoocAPI.class);
        classes.add(Authentication.class);
        return classes;
    }
}

push-location部分旨在获取用于选择作业步骤的正确smo类(不确定是否正确),但是我没有从中添加任何内容。

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

1 个答案:

答案 0 :(得分:1)

您可以使用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
    }
}