以下代码在W7,Serve2008上似乎对我有用,但当scriptblock作为作业运行时,在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的解决方案。
答案 0 :(得分:0)
这可能是因为CredSPP和凭证授权。 Windows Server 2003只有CredSSP客户端组件,没有服务器组件。因此,除非Windows Server 2003框也是域控制器,否则凭证委派nevers在那里工作。