2016-05-13 29 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

我得到了同样的结果,只有现在,而不是两个正在运行的工作,两个完成,它只显示两个完成。它仍然不会真正开始这个过程。 –