2016-09-14 1 views
0

Ich muss dacservice.deploy ausführen, um Datenbank von Version $from auf Version $to zu aktualisieren. Hier ist mein ps Skript:Powershell: Wie man mehrere dacservice.deploy Aufrufe in einer Sequenz

#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)  
} 

Derzeit dacService.Deploy sind parallel laufen aus irgendwelchen Gründen.

enter image description here

Wie dem auch sei, es zu fragen, one-by-one zu laufen?

PS: Ich mit sqlPackage.exe tun können:

#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" 
} 

Antwort

0

die MSDN-Dokumentation ist ein wenig Licht in diesem Bereich, aber die deploy Methoden sind asynchron so dass das Verfahren abgeschlossen ist, aber der Vorgang ist noch nicht abgeschlossen.

Sie müssen das "DacServices.ProgressChanged" -Ereignis anschließen und den Status des übergebenen Ereignisargs betrachten - aber beachten Sie, dass ich ziemlich sicher bin, dass Sie für jede Phase ein paar "Complete" -Nachrichten erhalten um zu sehen, was die Nachricht sagt, wenn sie fertig ist und auch, wenn sie mit einem Fehler fehlgeschlagen ist.

ed

Verwandte Themen