2016-12-23 10 views
0

データベースのバックアップを作成し、バックアップを圧縮し、FTPサイトにアップロードするPowershellスクリプトを作成しようとしています。ここに私のスクリプトの一部は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; 
} 
関連する問題