Использование Powershell для поиска последнего шага, запускаемого из задания агента SQL - PullRequest
0 голосов
/ 15 октября 2018

У меня есть скрипт powershell, который предоставляет информацию о задании агента SQL.Сценарий предназначен для мониторинга заданий и скажите мне, если они потерпели неудачу во время последнего запуска.Однако я также хочу знать , который был последним шагом выполнения .и я не могу понять, как.

Я запрашиваю объект управления 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

Раздел push-location предназначен для получения правильного класса smo для выбора шага задания (не уверен, что это правильно), однако я ничего из этого не добавил.

Теперь скрипт работает, я не получаю ошибок и мне возвращается вся необходимая информация, но я не могу понять, как добавить шаг задания, - и я обратился к Google.Я хорошо знаю, что мне нужно добавить больше к выбору, но в чем проблема для меня. Итак, как извлечь шаг задания последнего запуска из задания агента SQL с помощью SMO и добавить его в приведенный выше сценарий?

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете использовать модуль SqlServer из галереи PowerShell (Install-Module 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
    }
}
...