0

我将使用 Dbatools 检查我的作业是否正在运行。如果它没有运行,我需要发送电子邮件警报。

我只有很少的 PowerShell 编程背景。

# Import-Module D:\Tools\dbatools\dbatools.psd1 if it isn't loaded
If ( ! (Get-module dbatools )) {
Import-Module D:\Tools\dbatools\dbatools.psd1
}

# Get the job status
Get-DbaAgentJob -SqlInstance My_SQL_Instance -Job My_Job_Name | Out-File C:\DBA\Result.txt

# Send the email alert if the job is not running
Send-MailMessage -From My_Email_Address -Subject "My_Job_Name job is not running..." -To User_Email_Address -Attachments C:\DBA\Result.txt -Body "The MiantoEDW replication job is not running..." -BodyAsHtml -SmtpServer My_SmtpServer

我需要验证 CurrentRunStatus 的属性以确定是否发送电子邮件警报。

4

2 回答 2

1

我会做类似以下的事情:

$jobStatus = Get-DbaAgentJob -SqlInstance My_SQL_Instance -Job My_Job_Name
$jobStatus | Select-Object Name,CurrentRunStatus | Export-Csv C:\DBA\Result.csv -NoTypeInformation
if ($jobStatus.CurrentRunStatus -ne "Executing") {
    # Run some code if job is not running
    Send-MailMessage -From My_Email_Address -Subject "My_Job_Name job is not running..." -To User_Email_Address -Attachments C:\DBA\Result.csv -Body "The MiantoEDW replication job is not running..." -BodyAsHtml -SmtpServer My_SmtpServer
}
else {
    # Run some code if job is running
}

Get-DbaAgentJob默认情况下不显示该CurrentRunStatus属性。您将需要检索它,这是由 完成的Select-Object CurrentRunStatus。由于该命令输出一个对象,因此我选择使用它Export-Csv来导出一个更清晰的输出,以对齐对象的属性和值。$jobStatus存储Get-DbaAgentJob命令的输出。访问$jobStatus.CurrentRunStatusvalue 属性Executing将验证作业当前是否正在运行。

于 2019-07-11T18:42:09.383 回答
0

我没有使用 dbatools 但我假设 CurrentRunStatus 在您输出到的 Result.txt 文件中可用?

如果是这样,请将 Get-DbaAgentJob 的结果分配给一个变量,然后从该变量中分配 Out-File。然后从变量访问 CurrentRunStatus 属性以确定是否发送警报。

于 2019-07-11T17:52:56.870 回答