2016-12-23 64 views
0

因此,我正在尝试编写一个Powershell脚本来创建数据库的备份,压缩备份并将其上载到FTP站点。这里是我的脚本的一部分使Powershell等待SQL脚本/查询完成

示例脚本/代码:

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

我想阻止后的任何代码“援引-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'已经是一个同步cmdlet。如果要进行下一步,那是因为该声明已完成执行。 –

回答

1

你确定你的心不是...script that backs up the database只是抛出一个错误和PS继续?

这似乎表明,它实际上等待这一呼吁:

Write-Host "starting" 
push-location 

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

pop-location 
Write-Host "complete" 

在任何情况下,你应该警惕现有的文件,方法是放弃,如果该文件不存在,或者轮询,直到它(当我将.bak文件写入磁盘时,我不是100%)。

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

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