Перво-наперво: Write-Host
вообще имеет мало законных применений - делать не использовать его для вывода данных : вывод Write-Host
идетпрямо к консоли и поэтому не может быть ни отправлено по конвейеру, ни захвачено, ни перенаправлено (грубо говоря; для полной истории, смотрите последний раздел этого ответа моего).
Если вы хотите напечатать дружественное представление объекта для отображения только , используйте Out-Host
вместо Write-Host
, потому что последний делает не применять обычное дружественное форматирование вывода PowerShell.
$DataFileContent | Out-Host # print object *for display only*
Если вы намереваетесь выводить данные , вы можете положиться на PowerShell неявное поведение вывода , которое отправляет любой вывод, который не был явно захвачен или перенаправлен в поток вывода успеха, который по умолчанию выводится на консоль с использованием удобного форматирования:
$DataFileContent # same as: Write-Output $DataFileContent
Явное использованиеиз Write-Output
редко требуется. Заметным исключением является то, что если вы хотите вывести коллекцию как отдельный объект , используя -NoEnumerate
.
Примечание: экземпляры [xml]
оказываются только полу-дружественнымиформатирование вывода по умолчанию, которое не дает представления о структуре документа;чтобы увидеть последнее, перейдите к свойству .OuterXml
, хотя вам может потребоваться применить симпатичную печать, которая требует больше работы.
Write-Host
вывод отличается от Out-Host
инеявный вывод / Write-Output
, который выводится на консоль следующим образом:
Вместо применения стандартного форматирования вывода PowerShell Write-Host
по существу вызывает метод .ToString()
для своего ввода, что приводит кв разных, часто почти бесполезных представлениях - с заметным исключением string input.
Кроме того, Write-Host
перечисляет входные объектыесли применимо, так что элементы данного входного объекта индивидуально stringified.
Входной объект считается перечисляемым, если он реализует интерфейс [System.Collections.IEnumerable]
.
Это перечислениепроисходит рекурсивно , что в случае [xml]
приводит к выводу, который не только бесполезен , но также сбивает с толку - см. ниже.
[xml]
экземпляров, представляющих XML-документы, являются перечисляемыми, а и их перечисляемые элементы (узлы XML) рекурсивно .
Write-Host
рекурсивно перечисляет узлы верхнего уровня документа - который является либо только корневым элементом, либо, дополнительно, если присутствует, декларацией XML - и неизменно достигает одного или нескольких leaf узлы, чье перечисление неизменно пусто и дает пустую строку.Учитывая, что Write-Host
разделяет строковые значения его (перечисляемых) входных объектов с пробелом каждый, вы либо получаете пустую строку, либо один или несколько пробелов в качестве общего результата.