Рабочий процесс Powershell с параллельным файлом, используемым другим процессом

#powershell

Вопрос:

У меня есть сценарий powershell, который используется для упаковки артефактов на сервере сборки team city. Сценарий powershell был создан с помощью рабочего процесса, чтобы мы могли использовать параметр-Parallel для выполнения операций параллельно друг другу.

Этот сценарий работал, как и ожидалось, но недавно мы объединили некоторые проекты в одно решение, чтобы упростить разработку. После этого изменения сценарий пакета больше не работает, поскольку он не может получить доступ к файлам, поскольку они используются другим процессом.

Без опции-Parallel наши сборки занимают дополнительные 5 минут, поэтому мне было интересно, есть ли способ изменить сценарий, чтобы по-прежнему выполнять упаковку параллельно.

Конфигурация сборки состоит из нескольких задач:

  1. Создайте решение
  2. Упакуйте решение в артефакты

В настоящее время сценарий с ошибкой (в списке проектов около 20 проектов для упаковки):

 dotnet tool install --global Amazon.Lambda.Tools 2gt;$null  $prjs = (  [pscustomobject]@{ Path = "PathToProject"; ZipFileName = "projectName-deploy-package.zip" },  [pscustomobject]@{ Path = "PathToAnotherProject"; ZipFileName = "anotherProject-deploy-package.zip" }, )  foreach ($prj in $prjs) {  # Create the path to the zip file  $PathToZip = $prj.Path   "binreleasenetcoreapp3.1"   $prj.ZipFileName   # Delete cached zip file if any  Write-Host "Testing Path... "   $PathToZip  if (Test-Path $PathToZip) {  Write-Host "Deleting... "   $PathToZip  Remove-Item $PathToZip  } }  workflow LambdaPackingWorkflow {  param ([object[]]$prjs)  foreach -Parallel ($prj in $prjs) {  # Create the path to the zip file  $PathToZip = $prj.Path   "binreleasenetcoreapp3.1"   $prj.ZipFileName   Invoke-Expression ($env:USERPROFILE   ".dotnettoolsdotnet-lambda.exe package --project-location "   $prj.Path   " --configuration release --framework netcoreapp3.1 --msbuild-parameters ""--no-dependencies -v:q"" --output-package "   $PathToZip)  } }  LambdaPackingWorkflow -prjs $prjs | Format-Table Path, ZipFileName