Рабочие процессы ужасны для "ускорения" вещей, см. Ниже
Вам необходимо явно передать весь ввод в рабочий процесс!
Рабочие процессы разработаны выполнять отдельно от вызывающего процесса, и по этой причине команды и входные значения сериализуются (в основном превращаются в XML) перед выполнением.
Поэтому вы должны явно передать все, на что есть ссылки в рабочем процессе, в качестве параметров, у него не будет прямого доступа к вызывающей области во время выполнения:
function getPackage1 {
param($directory)
# ...
}
function getPackage2 {
param($directory)
#...
}
workflow getAllPackages {
param($directory)
parallel {
getPackage1 $directory
getPackage2 $directory
}
}
try { getAllPackages $PWD.Path } catch { <# ... #> }
Как намекает первый заголовок рабочие процессы довольно медленные (и сложные), поэтому, если вы просто пытаетесь ускорить загрузку всех файлов, вы можете просто разложить запросы к новым процессам с помощью Start-Job
:
function Get-PackageVersions
{
param ([string]$Destination)
$api = 'http://localhost/nuget/PackageName/Packages()?$format=json&$filter=id%20eq%20%27Package.Dotnet%27%20&$select=Version'
$responses = (Invoke-RestMethod $api).d.results.Version
$Jobs = foreach($response in $responses)
{
Start-Job { Invoke-WebRequest http://localhost/nuget/PackageName/package/Package.Dotnet/$using:response -OutFile (New-Item "$($using:Destination)\package\$using:response.nupkg" -Force) }
}
# Wait 30 seconds for jobs to complete
$completedJobs = $Jobs |Wait-Job -Timeout 30
$Jobs |Remove-Job
if(-not $completedJobs){
throw "Did not finish downloading all $($Jobs.Count) versions in time"
}
}
Затем передайте свой аргумент как:
$directory = "C:\target\folder"
Get-PackageVersions $directory