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 回答