0

次のコードは、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 で動作するソリューションが必要です。

4

1 に答える 1

0

これは、CredSPP と資格情報の委任が原因である可能性があります。Windows Server 2003 には CredSSP クライアント コンポーネントのみがあり、サーバー コンポーネントはありません。そのため、Windows Server 2003 ボックスがドメイン コントローラーでもある場合を除き、資格情報の委任はそこで機能しません。

于 2012-05-19T17:52:23.700 に答える