所以我试着编写一个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语句。
可能的相关问题:
答案 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;
}