Как указывалось в предыдущих комментариях, похоже, что вашей основной проблемой может быть неправильное понимание того, как командлеты Write- * работают в PowerShell.Write-Host выводит данные напрямую на хост / консоль, минуя нормальные потоки вывода PowerShell .Это можно быстро проиллюстрировать, выполнив следующие команды в сеансе PowerShell:
$MyVariable1 = Write-Host "Hello, World!"
$MyVariable2 = Write-Output "Hello, World!"
$MyVariable1
$MyVariable2
Если вы выполните вышеизложенное, вы обнаружите, что $ MyVariable1 не имеет назначенного значения (и вы могли бы на самом деле протестировать его для этогос чем-то вроде $null -eq $MyVariable1
), но $ MyVariable2 будет иметь значение «Hello, World!».
Чтобы ваш пример работал, чтобы получить вывод в переменную, вам нужно будет выполнить что-то вроде следующего:
$LargeFiles = Get-ChildItem $file | ? {$_.Length -gt 1mb} | ForEach-Object {Write-Output "Users:" $_.name "have Outlook Data Files larger than 8gb, with a total of" ("{0:N2}" -f($_.length/1mb)) "mb"}
Чтобы узнать больше о выходных потоках PowerShell, вы также можете прочитать статью about_redirection .