Следующий код, похоже, работает для меня на 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.
Я не уверен, что это связано. Я использую аутентификацию сервера sql для открытого соединения и sqlcmd с одинаковыми учетными данными. –
Но, фоновые задания используют дистанционное управление. – ravikanth
Попробуйте запустить этот код внутри Invoke-Command -ScriptBlock. Вы можете увидеть тот же результат, что и задания! – ravikanth