每个脚本的 Powershell 不按顺序

问题描述 投票:0回答:1

对于每条语句,我都有以下 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 
}
powershell foreach
1个回答
0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.