Прощайте скучный, предсказуемый вывод скриптов! С помощью командлета PowerShell Write-Output
вы можете добавить штрих креативности и индивидуальности в свои сценарии PowerShell.
Командлет Write-Output
– мощный инструмент и идеальный компаньон для всех ваших потребностей в автоматизации и управлении системой. И в этом руководстве вы узнаете, как максимально использовать потенциал командлета Write-Output
.
Готовы? Читайте дальше и откройте для себя волшебство командлета Write-Output
!
Предварительные требования
Это руководство будет демонстрацией на практике. Чтобы следовать за ним, убедитесь, что у вас есть компьютер с установленным PowerShell (желательно последней версией). В этом руководстве используется Windows 10 с установленным PowerShell 7.
Вывод объектов на консоль
Командлет PowerShell Write-Output
записывает объекты в поток вывода и отображает вывод команды или сообщение на консоли. Но вы удивитесь, насколько этот инструмент делает вывод более осмысленным и ценным.
Вместо отображения вывода в консоли используйте командлет Write-Output
, чтобы настроить вывод. Командлет Write-Output
может выводить любой объект или тип данных, такие как строки, целые числа, массивы и даже сложные объекты.
Запустите нижеприведенную команду, чтобы вывести сообщение Hello, World! в консоль.
Ниже вы можете увидеть самую базовую функцию командлета Write-Output
. Но продолжайте читать, чтобы узнать о более сложных способах использования этой команды.<>

Передача объектов в другую команду
Помимо отображения вывода в консоли, вы можете использовать командлет Write-Output
для отправки объекта в другую команду для дальнейшей обработки. Как? С помощью оператора конвейера (|
). Конвейеризация делает командлет Write-Output
удобной и универсальной командой для автоматизации и задач управления системой.
Предположим, вы хотите узнать, какой процесс потребляет больше всего ресурсов, таких как ЦП.
Выполните нижеприведенные команды, чтобы выполнить следующее:
- Получить список всех процессов (
Get-Process
), запущенных на вашей системе. - Выходной список направляется в конвейер, который затем передается команде
Sort-Object
. Оператор конвейера позволяет объединять несколько команд вместе и обрабатывать вывод одной команды как вход для другой. - Сортируйте список процессов (
Sort-Object
) по использованиюCPU
в порядке-Descending
.
Обратите внимание, что вы можете вставить любые из команд из этого руководства в сценарий PowerShell и выполнить его.
Отсортированный список отображается в консоли, как показано ниже.

Вывод объектов с пользовательским форматом
Вы видели базовый формат вывода командлета Write-Output, который работает нормально. Но если хотите, вы также можете выводить объекты с пользовательским форматом, чтобы добавить личное прикосновение. Пользовательский формат может быть полезен, когда вы хотите отобразить определенные свойства объекта или настроить внешний вид вывода.
Для вывода объекта с пользовательским форматом используйте Format-Custom
вместе с командлетом Write-Output
, как показано ниже:
чтобы создать пользовательский формат вывода, а затем направьте вывод командлета Format-Custom в Write-Output.<>
Запустите нижеприведенную команду, которая не генерирует вывод, но создает объект (хэш-таблицу), содержащий три свойства с соответствующими значениями для вывода.
Теперь выполните следующую команду, чтобы выполнить следующее:
- Создайте пользовательский формат (
Format-Table
) для вывода (Write-Output
) вашего hashtable ($object
). СвойстваProperty1
,Property2
иProperty3
установлены как столбцы. - Настройте ширину столбцов (
-AutoSize
), чтобы они вмещали содержимое.

В качестве альтернативы вы можете использовать командлет Format-List
с Write-Output
, чтобы вывести объект в виде списка пары свойство-значение.

Передача объекта коллекции как единого целого
По умолчанию Write-Output
отправляет каждый элемент коллекции через конвейер отдельно, процесс называется перечислением. Но вы можете предотвратить это поведение, добавив параметр -NoEnumerate
, передавая весь объект коллекции как единую сущность.
Чтобы увидеть, как работает параметр -NoEnumerate
, выполните следующие шаги:
Выполните следующие команды, чтобы выполнить следующее:
- Объявите массив
$numbers
от одного до трех (1,2,3
).
- Подсчитайте количество объектов (
Measure-Object
), переданных через конвейер. - Выведите измерение объекта (
Write-Output $numbers
).
Без параметра NoEnumerate
, Measure-Object
возвращает количество три (3), так как каждый элемент массива $numbers
перечислен и передан индивидуально через конвейер.

Теперь выполните следующие команды, чтобы вывести количество объектов, переданных через конвейер.
Но поскольку вы добавили параметр -NoEnumerate
, cmdlet Measure-Object
обрабатывает объект как единое целое, возвращая количество один (1).

Заключение команды
Write-Output
в круглые скобки (т.е.(Write-Output 1,2,3)
) приведет к принудительному перечислению, независимо от параметра-NoEnumerate
.
Создание системы меню и запросов ввода
Еще одним отличным способом использования команды Write-Output
является создание системы меню с помощью сценария PowerShell, который запрашивает ввод пользователя.
Создайте файл .ps1 с помощью вашего предпочтительного текстового/кодового редактора, заполните приведенный ниже код и сохраните файл. Вы можете назвать файл как угодно, но выбор этого учебного пособия – myoutput.ps1.
Код ниже использует цикл для постоянного предложения пользователю выбрать опцию из списка опций, пока пользователь не выберет опцию Выход
.
Теперь запустите сценарий (myoutput.ps1
) из рабочего каталога.
Как показано ниже, сообщение, связанное с вашим выбором, отображается, когда вы выбираете варианты 1, 2 или 3. Но когда вы выбираете опцию 4, сценарий завершается.

Отображение экрана приветствия или приветственного сообщения
Кроме перечисления вариантов, из которых пользователи могут выбирать, с помощью Write-Output
также можно отображать заставку или приветственное сообщение. Эффектные заставки создают хорошее впечатление (профессиональное и отполированное) на ваш сценарий.
Замените код в вашем файле myoutput.ps1 на следующий, который выводит заставку (баннер приветствия), когда вы запускаете свой сценарий.
Вы можете настроить заставку, изменив текст и форматирование баннера. По желанию вы можете добавить дополнительные элементы, такие как логотип или текст, в заставку.
Теперь запустите сценарий и посмотрите, как выглядит ваша заставка.

Отображение полосы прогресса
При выполнении сценариев индикатор прогресса устраняет беспокойство пользователя о том, выполняется ли сценарий или нет. Полосы прогресса могут быть полезны для отображения хода долгого сценария или операции пользователю. К счастью, с помощью cmdlet Write-Output
вы можете создать полосу прогресса по своему вкусу.
Откройте ваш файл myoutput.ps1 и добавьте следующий код в конец существующего в сценарии.
Нижеприведенный код использует цикл while
, чтобы перебирать несколько шагов. В данном примере – 100 шагов. Каждая итерация цикла вычисляет процент выполненных шагов и отображает полосу прогресса с использованием Write-Output
.
Полоса прогресса создается с использованием комбинации следующих операторов:
*
– Повторяет строку указанное количество раз$()
– Позволяет включить вывод выражения в строку.
Затем сценарий приостанавливается (Start-Sleep
) на 1
секунду для имитации прогресса перед переходом к следующему шагу.
Теперь запустите сценарий и посмотрите, как работает индикатор прогресса.
Ниже вы можете увидеть экран приветствия вместе с индикатором прогресса.

Заключение
В этом руководстве вы увидели, как легко с помощью Write-Output
можно выводить объекты, типы данных и пользовательские форматы. Кроме того, вы коснулись использования оператора конвейера для отправки вывода в другие команды для дальнейшей обработки.
Независимо от того, пишете ли вы простые сообщения или сложные задачи автоматизации, Write-Output
является незаменимым инструментом для создания более информативных и профессиональных сценариев PowerShell.
Обладая этим новым знанием, почему бы не записывать ваши выводы в различные типы файлов, такие как .txt и .xml? Независимо от цели, копии вывода пригодятся при устранении проблем с вашей системой или приложениями. Write-Output
и командлет Out-File
предоставляют вам мощь, о которой вы даже не подозревали.
Source:
https://adamtheautomator.com/powershell-write-output/