В старом машинном зале, где гудят латунные сервомеханизмы, а логи передаются по медным трубкам пневмопочты, существует один неприметный, но критически важный распределительный клапан. Это Write-Output. Сисадмин, впервые запустивший PowerShell, может решить, что перед ним просто печатная машинка — мол, вывел строку на консоль и дело с концом. Но дьявол, как всегда, прячется в медных шестерёнках: Write-Output не печатает на экран. Он отправляет объекты вниз по конвейеру — прямо в поток вывода, словно диспетчер, запускающий капсулу с донесением по пневматической сети цеха.
Любой сисадмин знает: настоящая сила PowerShell не в том, чтобы просто увидеть результат, а в том, чтобы передать его дальше — на фильтрацию, трансформацию или запись в журнал. И здесь Write-Output становится главным оператором парового телеграфа. Именно он формирует тот самый поток объектов, без которого рухнет любой скрипт, как паровая машина без смазки. Забудь о нём — и твои команды утонут в цифровом шуме, а конвейер остановится.
Главное свойство Write-Output — честность. Он не приукрашивает вывод, не лезет с отладкой в консоль, не обходит очередь. Каждый объект, переданный через этот механизм, аккуратно упаковывается в латунный цилиндр и отправляется по назначению: дальше в конвейер, в файл или в другую команду. А когда ты осознаёшь разницу между Write-Output и его шумным кузеном Write-Host, ты перестаёшь ломать свои же трубопроводы и начинаешь строить настоящие заводские сборочные линии.
Синтаксис
Write-Output [-InputObject] <PSObject[]> [-NoEnumerate] [<CommonParameters>]Основные опции
| Опция | Описание | Пример |
|---|---|---|
-InputObject | Принимает объекты (строки, числа, коллекции), которые будут переданы в выходной поток. Если не указан, можно передавать через конвейер. | Write-Output -InputObject "Давление в норме" |
-NoEnumerate | Запрещает разворачивание коллекций. Массив или список отправляются в поток как единый объект, а не поэлементно. Критично, когда важна структура. | $data = @(1,2,3); Write-Output $data -NoEnumerate |
<CommonParameters> | Стандартные параметры PowerShell: -Verbose, -Debug, -ErrorAction и т.д. Позволяют управлять выводом диагностики. | Write-Output "Пуск" -Verbose |
Примеры использования
Запуск простого сообщения в магистраль
Отправляем строку в поток вывода. Дальше она может быть перехвачена любым следующим звеном конвейера.
Write-Output "Пар подан в турбину №3"
Передача объектов через конвейер
Write-Output не просто выбрасывает текст — он аккуратно укладывает объекты на ленту. Здесь мы ловим список процессов и сразу фильтруем те, что потребляют больше 10 секунд процессорного времени.
Get-Process | Write-Output | Where-Object { $_.CPU -gt 10 }Сохранение коллекции без развёртывания
Если у тебя есть массив, и ты хочешь передать его как цельный блок данных (например, для записи в CSV одной ячейкой), флаг -NoEnumerate удержит капсулу закрытой.
$readings = @(98.6, 101.3, 145.2)
Write-Output $readings -NoEnumerate | Export-Csv -Path "C:\Logs\pressures.csv"💡 Совет
Почему не Write-Host? Многие новички хватаются за Write-Host, потому что он кричит прямо в консоль. Но это как гудок паровоза: шум есть, а в документах ничего не оседает. Write-Host минует поток вывода, и его нельзя перенаправить в файл или передать дальше. Представь: ты пытаешься принять показания манометра, а коллега орёт их тебе на ухо, не записывая в журнал. Используй Write-Output для данных, которые идут в работу, а Write-Host — только для интерактивных подсказок оператору, если без него никак.
⚡ Важно
Явный вызов Write-Output часто избыточен. Любое неприсвоенное выражение в PowerShell и так отправляется в выходной поток. Строка "Пар на рубеже" сделает то же самое, что и Write-Output "Пар на рубеже". Однако инженерный стиль требует явности: когда ты видишь Write-Output посреди длинного скрипта, сразу ясно — здесь осознанное впрыскивание данных в магистраль, а не случайный результат вычисления. Применяй его как маркер ключевых точек твоего парового кода.
⚙️ Машинное отделение ROADIT благодарит за прочтение.
Больше команд, шпаргалок и обзоров — на roadit.ru и в нашем Телеграф-канале.
📋 Все команды