Não - "Paralelo" não suporta um limite de aceleração
Acho que você está confundindo duas funcionalidades distintas nos fluxos de trabalho do PowerShell:
-
Parallel
(que é uma palavra-chave do Workflow Foundation) -
-Parallel
(um parâmetro específico do fluxo de trabalho para o loopforeach
)
A palavra-chave Parallel
significa: "Cada uma das seguintes instruções / sequências pode ser executada em paralelo".
Então, um bloco Parallel
em um fluxo de trabalho, como este:
Workflow Test-Parallel {
Parallel{
1
2
3
4
}
}
Não é garantido que retorne @(1,2,3,4)
- poderia retornar os números em qualquer ordem.
Para demonstrar isso, tente o seguinte:
function Do-Stuff {
param($i)
Start-Sleep -Milliseconds $(Get-Random -Minimum 10 -Maximum 400)
return $i
}
Workflow Test-Parallel {
Parallel {
Do-Stuff -i 1
Do-Stuff -i 2
Do-Stuff -i 3
Do-Stuff -i 4
Do-Stuff -i 5
Do-Stuff -i 6
Do-Stuff -i 7
Do-Stuff -i 8
Do-Stuff -i 9
Do-Stuff -i 10
}
}
Test-Parallel
Você deve ver que os números de 1 a 10 são retornados de forma embaralhada.
Então, se você conhece todas as variáveis (ou seja, os nomes dos computadores) de antemão, você pode fazer:
Workflow Get-ParallelCS {
Parallel {
Get-WmiObject -PSComputerName "client01.domain.tld" -Class "Win32_ComputerSystem"
Get-WmiObject -PSComputerName "client02.domain.tld" -Class "Win32_ComputerSystem"
Get-WmiObject -PSComputerName "client03.domain.tld" -Class "Win32_ComputerSystem"
Get-WmiObject -PSComputerName "client04.domain.tld" -Class "Win32_ComputerSystem"
Get-WmiObject -PSComputerName "client05.domain.tld" -Class "Win32_ComputerSystem"
Get-WmiObject -PSComputerName "client06.domain.tld" -Class "Win32_ComputerSystem"
Get-WmiObject -PSComputerName "client07.domain.tld" -Class "Win32_ComputerSystem"
}
}
Get-ParallelCS