PowerShell: как лучше всего выполнять параллельное выполнение команд с логированием? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть приложение, предоставленное поставщиком, которое необходимо запустить один раз с каждым из нескольких локально сохраненных файлов конфигурации. Я пробовал два разных метода для параллельного запуска этих команд: один медленнее, но работает нормально, второй кажется быстрее, но у меня нет журналов, поэтому я не могу подтвердить, что приложение действительно выполняется.

Этот первый метод определенно работает параллельно. Это намного быстрее, чем старая процедурная версия. Так что это здорово.:

$configList = $(Get-ChildItem E:\Path\*config.ps1 -recurse).FullName
$configList | ForEach-Object -Parallel {
    # Get the config and logfile path for each
    . $_
    Invoke-expression "& E:\dir\app.exe $config"  | Out-File -Append -FilePath $logfile
}

Из моего чтения я понимаю, что использование RunspacePool может быть еще быстрее, и он выполняется быстрее, но он не производит никаких записей в моих журналах, поэтому я не могу гарантировать он работает правильно. Любая помощь приветствуется.

$RunspacePool = [runspacefactory]::CreateRunspacePool(1, 5)
$RunspacePool.Open()
$Jobs = @()
$configList = $(Get-ChildItem E:\Path\*config.ps1 -recurse).FullName
$configList | ForEach-Object {
    # Get the config and logfile path for each
    . $_
    $PowerShell = [powershell]::Create()
    $PowerShell.RunspacePool = $RunspacePool
    $PowerShell.AddScript({Invoke-expression "& E:\dir\app.exe $config" | Out-File -Append -FilePath $logfile})
    $Jobs += $PowerShell.BeginInvoke()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...