【问题标题】:Using Powershell to find last step run from an SQL agent job使用 Powershell 查找 SQL 代理作业的最后一步运行
【发布时间】:2018-10-15 13:03:02
【问题描述】:

我有一个提供 SQL 代理作业信息的 powershell 脚本。该脚本旨在监视作业并告诉我它们上次运行时是否失败。不过我也想知道这是最后一个运行步骤。我似乎无法弄清楚如何。

我正在查询 Sql 服务器管理对象,因为它需要在多个远程服务器(远程连接)上可用,并且我希望避免运行 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

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

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

【问题讨论】:

    标签: powershell smo


    【解决方案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
        }
    }
    

    【讨论】:

    • 附带说明,SQLServer module 确实是 Microsoft 支持的较新的 SQL Server 库。它包括已弃用的SQLPS 功能,并在错误修复的基础上提供了附加功能,例如要求您使用Push/Pop-Location 的功能。
    • 谢谢大家! - 目前无法测试它,但一旦我可以得到结果
    • 多么美好的一周!直到现在还不能坐下来测试这个。无论如何,它有效 :D 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多