0

以下のコードを使用して、正常に動作している SSIS から ssis ジョブを実行していますが、ジョブを実行した後、ジョブが終了するのを待ってからさらに続行する必要があります

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") |Out-Null;
[Microsoft.SqlServer.Management.Smo.Server]$sqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server $HostName;

if([String]::IsNullOrEmpty($sqlServer.Urn))
{
    Write-Host "`nThe hostname provided is not a valid SQL Server instance.  Did you mistype the alias or forget to add the instance name?`n";
    Exit;
}
else
{ 
    [String]$databaseInstance = $sqlServer.JobServer.Urn.Value.Substring($sqlServer.JobServer.Urn.Value.IndexOf("'") + 1, `
    $sqlServer.JobServer.Urn.Value.IndexOf("'", ($sqlServer.JobServer.Urn.Value.IndexOf("'")) `
        - ($sqlServer.JobServer.Urn.Value.IndexOf("'"))));
}

Write-Host "Enumerating jobs on server ...";

[Microsoft.SqlServer.Management.Smo.Agent.Job]$job = ($sqlServer.JobServer.Jobs | ? { $_.Name -eq $JobName });

if($job -eq $null)
{
    Write-Host "`nNo such job on the server.`n";
    Exit;
}

# Finally invoke the job.  Use the job history (in SSMS) to verify the success of the job.
Write-Host "Executing job (the script doesn't wait for the job to finish but it should)...`n`n";
$job.Start();

*$job.Start(); の後にどのように待つことができますか? ジョブが完了したことを確認して、先に進むことができますか?

以下のコードを実行していますが、正しく動作していません。

   [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")

$server = new-object "Microsoft.SqlServer.Management.Smo.Server" "ServerName"
$job = $server.JobServer.Jobs["YourJobName"]
$now = Get-Date
do
{
 Start-Sleep -Seconds 1
 $job.Refresh()
 $jobstat = $job | select CurrentRunStatus
 $stat = $jobstat.CurrentRunStatus
 WRITE-HOST $stat
}

while($stat -eq "Executing")

$job | select Name,CurrentRunStatus,LastRunDate
4

1 に答える 1

0

SQL エージェント ジョブの開始は非同期イベントです。進行状況メッセージをプッシュバックする機能がありません。Tab Alleman がコメントしているように、msdb ジョブ テーブルをポーリングして、エージェントがまだ実行されているかどうかを判断する必要があります。

とはいえ、エージェント経由でジョブを起動する必要がありますか? パッケージを実行しているだけの場合は、API を使用してパッケージを開始し、完了/失敗/その他になるまでイベントを監視します。

于 2013-05-07T15:29:29.820 に答える