У меня есть следующий код:
Get-ResourcePool -Server 1.1.1.1 | Where-Object {$_.Name -like 'XX*'} | foreach {
Write-Host $_.Name -ForegroundColor Red
Get-ResourcePool -Name $_.Name | Get-VM
}
, который выполняется асинхронно из-за конвейера - поэтому все выходные данные Write-Host появляются на консоли, и только после этого я получаю результат от Get-ResourcePool.
Вопрос : как сделать его синхронным - как мне дождаться завершения конвейера, прежде чем выполнить следующий цикл foreach.
PS Мне удалосьопределите, что проблема связана с конвейером, потому что, когда я удаляю канал внутри для каждого, я получаю то, что ожидаю.
PPS, я пробовал Start-Job -ScriptBlock { Get-ResourcePool -Name $Input | Get-VM } -InputObject "$_.Name"
, а затем жду, пока работа завершится, - но это не работаетиз-за того, что мне нужно подключиться к vCenter во время выполнения этой команды, я получаю:
7/1/2019 6:37:49 PM Get-ResourcePool You are not currently connected to any servers. Please connect first using a Connect cmdlet.
+ CategoryInfo : ResourceUnavailable: (:) [Get-ResourcePool], ViServerConnectionException
+ FullyQualifiedErrorId : Core_BaseCmdlet_NotConnectedError,VMware.VimAutomation.ViCore.Cmdlets.Commands.GetResourcePool
+ PSComputerName : localhost
ADDENDUM : добавление скриншотов с некоторыми предложениями - к сожалению, ни одно из нихработа:
Предложение от Reddit также не работает: https://www.reddit.com/r/PowerShell/comments/8hvjyn/output_delay/
Добавлениепауза в конце:
Добавление паузы и Out-Host в конце: