次のコードは、W7、Serve2008 では機能するようですが、スクリプトブロックがジョブとして実行されると Server 2003 で失敗します。
$scriptblock = [scriptblock]::Create('
$DestinationConnectionString_sql = "Data Source=<myserver>;Initial Catalog=<mydatabase>;User Id=sa;Password=<sapassword>"
$destConnection = New-Object System.Data.SqlClient.SQLConnection($DestinationConnectionString_sql)
" Before Open Statement Connection State $($destConnection.State)"
$destConnection.open()
" After Open Statement Connection State $($destConnection.State)"
$destConnection.close()
')
"--- direct call work on Server 2003 ---"
& $scriptblock
"--- call in PowerShell Job faills on Server 2003 ---"
Get-Job | remove-job -force
$start = Get-date
$job1 = (Start-job $scriptblock).id
" started"
Wait-Job -id $job1 -timeout 30 | Out-Null
if ((Get-job -id $job1).state -eq 'Running')
{
Stop-job -id $job1
}
" Job State: $((Get-Job).state)"
Receive-job -id $job1
$state1 = (Get-job -id $job1).State
$dauer1 = ((get-date) - $start).Totalseconds
" Time spent in job: $dauer1"
作業ドメインのいくつかのマシンでスクリプトをテストしました。直接実行は、どのマシンでも問題ありません。Windows Server 2003 sp 2 でジョブとして実行すると失敗します。open() のデフォルトのタイムアウトである 15 秒が機能しないことも、接続を開くこともありません。
注: これらのサーバーのジョブ内で sqlcmd を正常に実行できます。
この問題は、短時間で置き換えることができない一部のビルド エージェントで発生します。
Server 2003 sp 2 で動作するソリューションが必要です。