2016-12-23 2 views
0

Так что я пытаюсь написать сценарий Powershell, который создает резервную копию баз данных, сжимает резервную копию и загружает ее на FTP-сайт. Вот часть моего сценарияСделать Powershell ждать SQL Script/Query для завершения

Пример сценария/Код:

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!" 

Я хотел, чтобы предотвратить любой код после «Invoke-Sqlcmd .......» часть из не выполняется до тех пор, SQL-сценарий, поддерживающий базу данных, завершен, потому что линия сжатия не находит резервную копию базы данных, потому что резервное копирование занимает довольно много времени.

Я чрезвычайно новичок в использовании Powershell и не совсем понял, что некоторые другие, возможно, связанные вопросы, которые я нашел, предлагали в качестве решения, поскольку я называю свой SQL-запрос другим способом.

Возможные вопросы, относящиеся:

Get Powershell to wait for an SQL command to execute

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

+0

Что делать, если вы поместите их в функцию и подождите по возвращении. Нет асинхронизации. – johnny

+0

У вас есть идея о том, что я могу проверить по возвращении? Сценарий заменит существующую резервную копию, поэтому я не могу проверить, существует ли файл. –

+2

'Invoke-SqlCmd' уже является синхронным командлетом. Если он перейдет к следующему шагу, это потому, что завершение выполнения завершено. –

ответ

1

Вы уверены, что ваш ...script that backs up the database разве просто бросали ошибку и пс продолжения?

Это показывает, что он делает на самом деле ждать на этот призыв:

Write-Host "starting" 
push-location 

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

pop-location 
Write-Host "complete" 

В любом случае, вы должны остерегаться файл существующего, либо прерывании, если файл не существует или опроса до него (не на 100%, когда файл .bak записывается на диск).

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

# or, poll 
while(!(test-path $file)) {  
    start-sleep -s 10; 
} 
Смежные вопросы