Powershell等待进程完成同时进程的运行

时间:2016-05-13 20:24:47

标签: powershell firebird database-backups 7zip

我有一个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\CPIB_$siteid@$(get-date -f yyyyMMdd).7za $backupDir\$backupFile"
Start-Process $gbak $gbakArgs
Start-Process $7zip $7zArgs
}

现在应用程序正在做的是同时启动gbak和7zip的所有实例。我可以在gbak的start-process命令之后使用wait命令,但之后它只会启动一个gbak实例。我希望它能让它们全部进入。

1 个答案:

答案 0 :(得分:0)

我建议您使用 Jobs 。使用Start-Job cmdlet启动站点的新Job。它们将并行运行,因此您可以再次将-Wait开关添加到gbak进程。最后,使用Get-Job cmdlet检索所有作业,并等到他们完成使用Wait-Job