Не используйте Write-Host, если вы пытаетесь использовать данные, которые хотите отправить другому элементу. Write-Host очищает буфер и не подходит для конвейера, если вы ниже PowerShellv5x. В версии 5 он теперь записывает в информационный поток. Это было задокументировано Microsoft уже некоторое время.
http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful
... Джеффри Сновер меняет свою позицию по этому вопросу с мая 2016 года.
С PowerShell v5 Write-Host больше не "убивает щенков". данные
захватывается в информационный поток ...
https://twitter.com/jsnover/status/727902887183966208 ...
https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Write-Information?view=powershell-5.1
Обратите внимание на использование определенных выходных перенаправлений.
О перенаправлении
Примеры
# Example 1: Redirect errors and output to a file
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
Этот пример запускает dir для одного элемента, который будет успешным, и для одного, который будет
ошибка.
Он использует 2> & 1 для перенаправления потока ошибок в поток Success и> для отправки результирующего потока Success в файл с именем dir.log
# Example 2: Send all Success stream data to a file
.\script.ps1 > script.log
Эта команда отправляет все данные потока успеха в файл с именем script.log
# Example 3: Send Success, Warning, and Error streams to a file
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > P:\Temp\redirection.log
В этом примере показано, как можно объединить операторы перенаправления для
достичь желаемого результата.
• 3> & 1 перенаправляет поток предупреждений в поток Success.
• 2> & 1 перенаправляет поток ошибок в поток успеха (который также
теперь включает все данные потока предупреждений)
•> перенаправляет поток успеха (который теперь содержит как предупреждение, так и
Потоки ошибок) в файл с именем C: \ temp \ redirection.log)
# Example 4: Redirect all streams to a file
.\script.ps1 *> script.log
В приведенной ссылке есть другие определения / опции вывода.