2012-05-19 1 views
0

Следующий код, похоже, работает для меня на W7, Serve2008, но сбой на сервере 2003 года, когда сценарий запускается как задание.SQLConnection.open() не работает в заданиях PowerShell на сервере 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 завершается с ошибкой. Ни время ожидания по умолчанию 15 секунд для open() не работает, ни открытие соединения.

Примечание: я могу успешно выполнить sqlcmd в рамках заданий на этих серверах.

Проблема возникает с некоторыми агентами сборки, которые не могут быть заменены за короткое время.

мне нужно решение, которое работает с Server 2003 SP 2.

ответ

0

Это может быть из-за CredSPP и верительных делегации. Windows Server 2003 имеет только клиентский компонент CredSSP и серверный компонент. Таким образом, делегирование учетных данных не работает там, если поле Windows Server 2003 также не является контроллером домена.

+0

Я не уверен, что это связано. Я использую аутентификацию сервера sql для открытого соединения и sqlcmd с одинаковыми учетными данными. –

+0

Но, фоновые задания используют дистанционное управление. – ravikanth

+0

Попробуйте запустить этот код внутри Invoke-Command -ScriptBlock. Вы можете увидеть тот же результат, что и задания! – ravikanth