Поиск по сайту:

Как использовать Powershell Write Host


Команда Write-Host в PowerShell используется для вывода текста в консоль для пользователя. Она обычно используется для отображения процесса выполнения скрипта, вывода результатов или отображения инструкций для пользователя.

В этой статье мы рассмотрим, как использовать cmdlet Write-Host, различные доступные опции, и я приведу вам несколько примеров.

Команда Write-Host PowerShell

Write-Host служит на самом деле оберткой для более старой команды Write-Information. До версии PowerShell 5.0 мы должны были использовать команды Write-Information или Write-Output для вывода информации в консоль. Старые команды не имели много возможностей, в то время как Write-Host предлагает нам несколько вариантов стилизации, которые мы можем использовать:

-ForegroundColor

Цвет текста

-BackgroundColor

Цвет фона текста

-NoNewline

Не добавлю новую строку после вывода

-Separator

Добавляет разделитель между выводом каждого элемента в объектах или массивах

Параметры CmdLet Write-Host

По умолчанию, cmdlet Write-Host выведет строку на новой строке в консоли, используя цвет консоли по умолчанию (в большинстве случаев белый):

Write-Host "Welcome to the Lazy Script!"

Использование цветов в Write-Host

Цвета - отличный способ привлечь внимание пользователя или неverbально сообщить что-то о статусе. Например, желтый текст часто указывает на предупреждение, тогда как красный текст, скорее всего, является ошибкой. В PowerShell мы можем задать цвет для текста, используя параметр -foregroundcolor, и цвет фона для текста с помощью -backgroundcolor.

Мы можем использовать следующие цвета для обоих параметров:

  • Черный
  • DarkBlue
  • DarkGreen
  • DarkCyan
  • DarkRed
  • DarkMagenta
  • DarkYellow
  • Серый
  • DarkGray
  • Синий
  • Зеленый
  • Циан
  • Красный
  • Магента
  • Желтый
  • Белый

Форматирование вывода

По умолчанию каждая строка, выводимая командой Write-Host, отображается с новой строки. В большинстве случаев это нормально, но иногда вы не хотите, чтобы была новая строка, или, возможно, лишняя новая строка между выводами.

Давайте сначала посмотрим, как добавить результаты за предыдущим выводом Write-Host. Для этого мы можем использовать параметр -NoNewline. Когда он добавлен, следующий вывод будет добавлен к существующей строке:

Write-Host "Number of mailboxes: " -NoNewline

Get all mailboxes function
$mailboxes = Get-AllMailboxes

Write-Host $mailboxes

Result:
Number of mailboxes: 5

Как вы можете видеть, значение $mailboxes добавлено после строки “Количество почтовых ящиков”.

Если вы хотите создать дополнительную пустую строку между выводами, вы можете использовать символ `n. Это добавит дополнительную новую строку после вывода команды write-host:

Write-Host "Getting all user mailboxes `n" -ForegroundColor Cyan
Write-Host "Shared mailboxes found `n `n" -ForegroundColor Yellow
Write-Host "Script finished" -ForegroundColor Green

Использование переменных внутри Write-Host

Хорошо знать, что мы можем использовать переменные внутри вывода команды write-host. Простая строковая переменная может быть включена в строку команды write-host при использовании двойных кавычек " ". Имейте в виду, что вы не можете использовать переменные внутри строк, заключенных в одинарные кавычки ' '. Разница в том, что PowerShell обрабатывает только строки, заключенные в двойные кавычки.

$user = "[email "
Write-Host "Getting mailbox of $user"

Result
Getting mailbox of [email 

Но когда вы работаете с объектами, вы могли заметить, что не можете вывести элементы объекта. Например, это не сработает:

$user = [PSCustomObject]@{
    DisplayName = "Megan"
    Email = "[email "
}

Write-Host "Getting mailbox of $user.displayname"

Чтобы показать отображаемое имя объекта пользователя, нам нужно обернуть его в скобки, как это:

$user = [PSCustomObject]@{
    DisplayName = "Megan"
    Email = "[email "
}

Write-Host "Getting mailbox of $($user.DisplayName)"

Result
Getting mailbox of Megan

Используя разделитель

Когда вы хотите вывести результаты массива в консоль, результаты по умолчанию отображаются в одной строке. Например, у меня есть файл CSV с некоторыми фруктами. Когда мы импортируем файл CSV и выводим результат, он будет отформатирован следующим образом:

$example = import-csv -path C:\temp\example.csv -Header Fruit
Write-Host $example.fruit

Result
Apple Banana Pear Kiwi Raspberry Melon

Чтобы показать каждый фрукт на отдельной строке или разделить каждый фрукт с помощью символа, мы можем использовать параметр -Separator:

Show results on a new line
$example = import-csv -path C:\temp\example.csv -Header Fruit
Write-Host $example.fruit -Separator "`n"

Result
Apple
Banana
Pear
Kiwi
Raspberry
Melon

Separate results with a space and dash
$example = import-csv -path C:\temp\example.csv -Header Fruit
Write-Host $example.fruit -Separator " - "

Result
Apple - Banana - Pear - Kiwi - Raspberry - Melon

Напишите примеры форматирования хоста

С некоторой долей креативности вы можете создавать разные баннеры или уведомления в своих скриптах, которые действительно выделяются. Ниже я собрал несколько примеров, которые могут вас вдохновить. Если у вас есть другие хорошие примеры, пожалуйста, поделитесь ими в комментариях ниже!

Добавление новой строки выше и ниже предупреждающего сообщения, добавление пространства вокруг сообщения и использование фона действительно могут сделать сообщение более заметным:

Write-Host "`n"
Write-Host "   RUNNING IN TEST MODE   "  -BackgroundColor Yellow -ForegroundColor Black
Write-Host "`n"

Скриптовые баннеры всегда немного сложно правильно настроить. В приведенном ниже примере кода он не выглядит выровненным, но при использовании в скрипте вы увидите идеальный баннер.

Write-Host "`n"
Write-Host "                    -------------------------------------------------            " -ForegroundColor Cyan
Write-Host "                    |                                               |						" -ForegroundColor Cyan
Write-Host "                    |               Create new AD User              |						" -ForegroundColor Cyan
Write-Host "                    |                  Version 1.7                  |						" -ForegroundColor Cyan
Write-Host "                    |                                               |						" -ForegroundColor Cyan
Write-Host "                    |          Author R. Mens - LazyAdmin.nl        |						" -ForegroundColor Cyan
Write-Host "                    |                                               |						" -ForegroundColor Cyan
Write-Host "                    -------------------------------------------------            " -ForegroundColor Cyan
Write-Host "`n"

Мы также можем сделать что-то интересное с цветами переднего плана и некоторым ASCII-артом. Код ниже делит позицию каждого символа на 6. В зависимости от результата он присвоит цвет символу. Используя параметр -NoNewline, мы можем добавить результаты:

$text = "
 _                      ___      _           _       
| |                    / _ \    | |         (_)      
| |     __ _ _____   _/ /_\ \ __| |_ __ ___  _ _ __  
| |    / _  |_  / | | |  _  |/ _  | '_   _ \| | '_ \ 
| |___| (_| |/ /| |_| | | | | (_| | | | | | | | | | |
\_____/\__,_/___|\__, \_| |_/\__,_|_| |_| |_|_|_| |_|
                  __/ |                              
                 |___/                               "


for ($i=0; $i -lt $text.length; $i++) {
    switch ($i % 6) {
        0 { $c = "white" }
        2 { $c = "green" }
        4 { $c = "blue" }
        default { $c = "cyan" }
    }
write-host $text[$i] -NoNewline -ForegroundColor $c
}

Заключение

Cmdlet Write-Host — отличный способ держать пользователя вашего скрипта в курсе о ходе выполнения. Он может давать инструкции пользователю, показывать результаты или просто информировать пользователя о том, что скрипт завершен или возникла ошибка.

Хорошо используйте цвета на переднем плане, потому что они действительно помогают быстро определить значение сообщения.

Надеюсь, вам понравится эта статья. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже!