powershell:如何在序列

时间:2016-09-14 02:39:23

标签: powershell sql-server-data-tools dacpac

我必须运行dacservice.deploy才能将数据库从版本$from更新为版本$to。这是我的ps脚本:

#deploy
For ($i=$from; $i -le $to; $i++) {    
    $dacpacFileName = $dacpacPathName + $i + '.dacpac'

    Write-Output "-----------------------------------------------------------------------"
    Write-Output "Deploying... $dacpacFileName to $databaseServerName\$targetDatabaseName"
    Write-Output "-----------------------------------------------------------------------"

    #dacpac    
    $dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpacFileName)    

    #options
    $options = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
    $options.GenerateSmartDefaults="True"
    $options.BlockOnPossibleDataLoss="False"
    $options.IncludeTransactionalScripts = "True"

    #deploy
    $dacService.Deploy($dp, $targetDatabaseName, $upgradeExisting, $options)     
}

由于某些原因,目前dacService.Deploy并行运行。

enter image description here

无论如何要求它一个接一个地运行?

PS:我可以使用sqlPackage.exe

#deploy
For ($i=$from; $i -le $to; $i++) {    
    $dacpacFileName = $dacpacPathName + $i + '.dacpac'

    Write-Output "-----------------------------------------------------------------------"
    Write-Output "Deploying... $dacpacFileName to $databaseServerName\$targetDatabaseName"
    Write-Output "-----------------------------------------------------------------------"

    & $sqlPackageExePath /a:Publish /sf:$dacpacFileName /tdn:$targetDatabaseName /TargetServerName:$databaseServerName /p:GenerateSmartDefaults=true

    Write-host "Finished"
}

1 个答案:

答案 0 :(得分:0)

msdn文档在这方面有点亮,但部署方法是异步的,所以方法完成但操作仍在进行中。

您需要连接“DacServices.ProgressChanged”事件并查看传入的事件arg的状态 - 但请注意,我很确定您为每个阶段获得了一些“完整”消息,因此您需要还可以看到消息在完成时所说的内容,以及是否因错误而失败。