2016-05-13 34 views
0

我有一個PowerShell腳本,將啓動兩個不同進程的多個實例。Powershell等到進程完成同時進程運行

我想能夠啓動多個同時發生的gbak實例,並且我不希望7zip開始直到第一個gbak實例完成,並且我希望7zip的一個新實例每次啓動一個實例的gbak完成。

這裏是我的腳本,因爲它代表:

Import-Module "sqlps" -DisableNameChecking 
Invoke-Sqlcmd -Query "USE ASPNETDB; SELECT DATABASELOCATION, SITEID FROM FIREBIRDCONNECTIONS;" -ServerInstance "DV-SQLSTAG01\EXPRESS2014" | Export-CSV - Path "C:\Scripts\strings.csv" 
C: 
CD C:\Scripts 
$fbConn = Import-Csv -Path .\strings.csv 
ForEach ($site in $fbConn) { 
$cString = $site.DATABASELOCATION 
$siteid = $site.SITEID 
$backupDir = "D:\DBBackups" 
$backupFile = "Cpib_$siteid.bak" 
$gbak = ".\gbak.exe" 
$gbakArgs = "-b -g -user sysdba -password masterkey $cString $backupDir\$backupFile" 
$7zip = ".\7za.exe" 
$7zArgs = "a -v1g -r -y -t7z -mx=3 $backupDir\[email protected]$(get-date -f yyyyMMdd).7za $backupDir\$backupFile" 
Start-Process $gbak $gbakArgs 
Start-Process $7zip $7zArgs 
} 

現在什麼應用程序正在做的是推出GBAK和7zip的的所有實例在同一時間,一次全部。我可以在gbak的start-process命令後面使用一個等待命令,但它只會啓動一個gbak實例。我希望它能讓他們一次完成。

回答

0

我建議你與工作。使用Start-Job cmdlet開始一個新的工作您的網站的foreach。它們將並行運行,因此您可以再次將-Wait開關添加到gbak進程。最後,使用Get-Job cmdlet的檢索所有的作業和等待他們完成使用Wait-Job

+0

這似乎輸出與不同的作業顯示「運行」或「已完成」的狀態的表,但實際上並沒有啓動這兩種過程,直至。 –

+0

我錯過了參數部分,現在編輯我的答案,再試一次。 –

+0

我得到了同樣的結果,只有現在,而不是兩個正在運行的工作,兩個完成,它只顯示兩個完成。它仍然不會真正開始這個過程。 –