Как использовать 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 выведет строку на новой строке в консоли, используя цвет консоли по умолчанию (в большинстве случаев белый):
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 — отличный способ держать пользователя вашего скрипта в курсе о ходе выполнения. Он может давать инструкции пользователю, показывать результаты или просто информировать пользователя о том, что скрипт завершен или возникла ошибка.
Хорошо используйте цвета на переднем плане, потому что они действительно помогают быстро определить значение сообщения.
Надеюсь, вам понравится эта статья. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже!





