2016-12-23 6 views
0

So versuche ich ein Powershell-Skript, das eine Sicherung von Datenbanken erstellt, komprimiert die Sicherung und lädt sie auf eine FTP-Site. Hier ist ein Teil meines SkriptMachen Sie Powershell warten auf SQL-Skript/Abfrage zu beenden

Beispielskript/Code:

Write-Host "Backup of Database " $databaseName " is starting" 
push-location 

Invoke-Sqlcmd -Query "--SQL Script that backs up database--" -ServerInstance "$serverName" 

pop-location 
Write-Host "Backup of Database " + $databaseName " is complete" 

#Create a Zipfile of the database 
Write-Host "Compressing Database and creating Zip file...." 
sz a -t7z "$zipfile" "$file" 
Write-Host "Completed Compressing Database and creating Zip file!" 

Ich wünsche einen Code nach dem verhindern „Invoke-Sqlcmd .......“ Teil von, bis der ausgeführten Das SQL-Skript, das die Datenbank sichert, ist abgeschlossen, da die Komprimierungszeile die Sicherung der Datenbank nicht finden kann, da die Sicherung relativ lange dauert.

Ich bin extrem neu im Umgang mit Powershell und habe nicht ganz verstanden, was ein paar der anderen möglicherweise verwandten Fragen, die ich gefunden habe, als eine Lösung anbieten, da ich meine SQL-Anweisung anders nenne.

Mögliche Verwandte Fragen:

Get Powershell to wait for an SQL command to execute

Powershell run SQL job, delay, then run the next one

+0

Was, wenn Sie sie in eine Funktion setzen und auf die Rückkehr warten. Kein Async. – johnny

+0

Haben Sie eine Idee, auf was ich bei der Rückkehr nachsehen könnte? Das Skript wird die vorhandene Sicherung ersetzen, sodass ich nicht überprüfen konnte, ob die Datei vorhanden ist. –

+2

'Invoke-SqlCmd' ist bereits ein synchrones Cmdlet. Wenn es zum nächsten Schritt geht, liegt das daran, dass die Anweisung die Ausführung beendet hat. –

Antwort

1

Sind Sie sicher, Ihre ...script that backs up the database ist nicht nur einen Fehler zu werfen und die ps fortgesetzt?

Dies scheint darauf hinzudeuten, dass es in der Tat auf diesem Anruf warten tut:

Write-Host "starting" 
push-location 

Invoke-Sqlcmd -Query "waitfor delay '00:00:15';" -ServerInstance "$serverName" 

pop-location 
Write-Host "complete" 

In jedem Fall sollten Sie die Datei Schutz vor bestehenden, entweder durch Abbruch, wenn die Datei, bis sie existieren oder die Abfrage nicht tut (ich bin nicht 100% eingeschaltet, wenn die .bak-Datei auf die Festplatte geschrieben wird).

# abort 
if(!(test-path $file)) { 
} 

# or, poll 
while(!(test-path $file)) {  
    start-sleep -s 10; 
} 
Verwandte Themen