让Powershell等待SQL脚本/查询完成

时间:2016-12-23 21:46:59

标签: sql-server powershell

所以我试着编写一个Powershell脚本来创建数据库的备份,压缩备份并将其上传到FTP站点。这是我脚本的一部分

示例脚本/代码:

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

1 个答案:

答案 0 :(得分: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;   
}