Powershell 等待进程完成 运行 个并发进程

Powershell wait until process completes running simultaneous processes

我有一个 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"
zip = ".za.exe"
zArgs = "a -v1g -r -y -t7z -mx=3 $backupDir\CPIB_$siteid@$(get-date -f yyyyMMdd).7za $backupDir$backupFile"
Start-Process $gbak $gbakArgs
Start-Process zip zArgs
}

应用程序现在正在做的是同时启动 gbak 和 7zip 的所有实例,一次全部。我可以在 gbak 的 start-process 命令之后使用等待命令,但它只会启动一个 gbak 实例。我想让它们同时运行。

我建议你使用 Jobs。使用 Start-Job cmdlet to start a new Job foreach of your sites. They will run in parallel so you can add the -Waitswitch to the gbak process again. Finally, retrieve all Jobs using the Get-Job cmdlet and wait until they finish using Wait-Job