Вы утверждаете, что ваша функция get_alerts
использует Write-Host
для печати на экран .
Write-Host
. Выходные данные в соответствии с дизайном не отправляются в PowerShell. поток вывода успеха [1] , поэтому ничего не записывается в $output
, поэтому ничего не отправляется на Out-File
, поэтому выв итоге получится пустой файл.
Если вы можете изменить функцию get_alerts
, заменить Write-Host
вызовы Write-Output
вызовами или просто использовать неявный выход (например, вместо Write-Host $foo
, используйте Write-Output $foo
или просто $foo
).
Если вы не можете , и если вы используете PowerShell v5 или выше, вы можете использовать перенаправление 6>&1
, чтобы перенаправить Write-Host
вывод в поток успешного вывода , что позволяет захватывать его:
& { foreach ($elem in $ashost) { get_alerts $elem } } 6>&1 | Out-File C:\File.txt
Или, используя один конвейер:
$ashost | ForEach-Object { get_alerts $_ } 6>&1 | Out-File C:\File.txt
См. этот ответ для получения дополнительной информации.
[1] Write-Host
, как правило, не подходит для использования , если только яntent - записывать только на дисплей , минуя поток вывода успешных результатов и, таким образом, возможность отправлять вывод другим командам, захватывать его в переменную, перенаправлять в файл. В PSv5 + Write-Host
записывает в поток информации , выход которого может быть перехвачен , но только через 6>
. Смотрите также: последний раздел https://stackoverflow.com/a/50416448/45375