对于每条语句,我都有以下 PowerShell,该语句循环遍历大约 50 个邮箱的列表,并在每个邮箱上运行 2 个脚本。这两个脚本大约需要一个小时才能完成。由于 PowerShell 的顺序性质,这将需要 ~50 个邮箱 * 1 小时 = 50 小时。
PowerShell 是否可以同时并行地在每个邮箱上运行脚本?
Foreach($mailbox in $mailboxes){
Write-Host "$(Get-TimeStamp) Start of adding contacts $mailbox"
& $scriptPath -Mailbox $mailbox.UserPrincipalName -ClientSecret $clientSecret -ClientID $clientID -TenantID $tenantID -CSVPath $csvPath
Write-Host "$(Get-TimeStamp) Start of deduplicating contacts $mailbox"
& $scriptPath2 -Mailbox $mailbox.UserPrincipalName -ClientSecret $clientSecret -ClientID $clientID -TenantID $tenantID
}
使用
Start-Job
怎么样?
$jobs = @()
foreach ($mailbox in $mailboxes) {
$job1 = Start-Job -ScriptBlock {
Write-Host "$(Get-TimeStamp) Start of adding contacts $mailbox"
& $scriptPath -Mailbox $mailbox.UserPrincipalName -ClientSecret $clientSecret -ClientID $clientID -TenantID $tenantID -CSVPath $csvPath
}
$job2 = Start-Job -ScriptBlock {
Write-Host "$(Get-TimeStamp) Start of deduplicating contacts $mailbox"
& $scriptPath2 -Mailbox $mailbox.UserPrincipalName -ClientSecret $clientSecret -ClientID $clientID -TenantID $tenantID
}
$jobs += $job1, $job2
}
# Wait for all jobs to finish and retrieve results (if any)
$jobs | Wait-Job
$jobResults = $jobs | Receive-Job
# Clean up jobs and display results if needed
$jobs | Remove-Job
$jobResults