PowerShell から SQL エージェント ジョブにアクセスするには、SMO を使用できます。
編集:この関数をスクリプトに追加する場合の効率を考えて、SMO の読み込みを取り出して、スクリプトの一番上 (この関数の前) に配置します。関数を呼び出すたびにアセンブリをリロードすると、スクリプトの速度が低下する可能性があります。
Function Get-SQLJobStatus
{
param ([string]$server, [string]$JobName)
# Load SMO assembly, and if we're running SQL 2008 DLLs load the SMOExtended and SQLWMIManagement libraries
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
# Create object to connect to SQL Instance
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $server
# used to allow piping of more than one job name to function
if($JobName)
{
foreach($j in $jobName)
{
$srv.JobServer.Jobs | where {$_.Name -match $JobName} | Select Name, CurrentRunStatus
}
}
else #display all jobs for the instance
{
$srv.JobServer.Jobs | Select Name, CurrentRunStatus
} #end of Get-SQLJobStatus
}
この機能の使用例:
#will display all jobs on the instance
Get-SQLJobStatus MyServer
#pipe in more than one job to get status
"myJob","myJob2" | foreach {Get-SQLJobStatus -Server MyServer -JobName $_}
#get status of one job
Get-SQLJobStatus -Server MyServer -JobName "MyJob"
この関数をスクリプトで利用して、ジョブのステータスが「アイドル」になるまで while ループなどで繰り返し呼び出すことができます。少なくとも私の頭の中では、それがうまくいくと思います:)