我有一个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作业中提取最后运行的作业步骤,并将其添加到上述脚本中?
答案 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
}
}