Write-Host в PowerShell

Содержание
Примеры
Отличия от Write-Output
Экранирование символов
Добавить дату и время
Похожие статьи

Примеры

$P = "TEST" Write-Host $P -f Cyan

TEST

$dig = 1 ${let} = "A" Write-Host "https://devhops.ru" Write-Host "dig is $dig" -f Yellow Write-Host "dig is ${dig}" -f Cyan Write-Host "let is $let" -f Green Write-Host "let is ${let}" -f Blue

https://devhops.ru dig is 1 dig is 1 let is A let is A

Отличия от Write-Output

Разница между Write-Host и Write-Output значительно серьёзнее чем может показаться на первый взгляд.

Рассмотрим функцию return_one() из файла demo.ps1, которая возвращает 1 и пытается написать что-то с помощью Write-Host или Write-Output.

Вызовем эту функцию в соседнем файле main.ps1 и изучим тип данных, которые передаст нам функция.

type_demo/ ├── demo.ps1 └── main.ps1

# main.ps1 . "$PSScriptRoot\demo.ps1" $one = return_one $one.GetType()

# demo.ps1 function return_one() { Write-Host "returning one" return 1 }

.\main.ps1

returning one IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Int32 System.ValueType

Когда использовался Write-Host получилось Int32.

# demo.ps1 function return_one() { Write-Output "returning one" return 1 }

.\main.ps1

IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array

Когда мы использовали Write-Output получили не число, а массив.

Так как это массив, мы можем получить каждый элемент по отдельности и изучить их тип.

# main.ps1 . "$PSScriptRoot\demo.ps1" $one = return_one Write-Host "Array elements" -f Cyan $one[0].GetType() Write-Host $one[0] $one[1].GetType() Write-Host $one[1]

.\main.ps1

Array elements IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object returning one True True Int32 System.ValueType 1

Несмотря на то, что передан массив PowerShell 7 при сравнении результата с единицей понимает, что мы хотим и находит 1 в возвращаемых значениях.

# main.ps1 . "$PSScriptRoot\demo.ps1" $one = return_one if ($one -eq 1) { Write-Host "One" } else { Write-Host "Not one" }

.\main.ps1

Array elements One

Особенно осторожно нужно подходить к возвращаемым значениям при проверке на существование

# write-host_demo.ps1 function demo() { Write-Output "testsetup.ru" return 0 } $x = demo Write-Output "x is $x"

.\write-host_demo.ps1

x is testsetup.ru 0

Всё, что было отправлено в Write-Output попало в return

function demo() { $result = $null Write-Output "testsetup.ru" return $result } $result = demo if ($result) { Write-Output "result" } else { Write-Output "no result" }

.\write-host_demo.ps1

result

Хотя result, который мы ожидаем - это null из-за Write-Output проверка проходит.

Удалив Write-Output мы избавляемся от этой проблемы

function demo() { $result = $null return $result } $result = demo if ($result) { Write-Output "result" } else { Write-Output "no result" }

.\write-host_demo.ps1

no result

Write-Host или Write-Verbose (его нужно отдельно настраивать) не доставляют таких неудобств.

function demo { [CmdletBinding()] param() $result = $null Write-Host "testsetup.ru" Write-Verbose "heihei.ru" return $result } $result = demo -Verbose if ($result) { Write-Output "result" } else { Write-Output "no result" }

.\write-host_demo.ps1

testsetup.ru VERBOSE: heihei.ru no result

Экранирование символов

Экранировать двойные кавычки внутри двойных кавычек можно символом `

# demo.ps1 $url = "testsetup.ru" Write-Host "Here is quoted url `"$url`"" -f Magenta

.\demo.ps1

Here is quoted url "testsetup.ru"

С помощью ` можно экранировать и другие символы, например $

# demo.ps1 $url = "heihei.ru" Write-Host "`$url: `"$url`"" -f Cyan

.\demo.ps1

$url: "heihei.ru"

Добавить дату и время

С помощью Get-Date можно перед каждым сообщением добавить текущую дату и время.

$url = "testsetup.ru" Write-Host ((Get-Date -Format "yyyy-MM-dd HH:mm:ss") + " `$url: `"$url`"") -f Green Start-Sleep 5 $url = "heihei.ru" Write-Host ((Get-Date -Format "yyyy-MM-dd HH:mm:ss") + " `$url: `"$url`"") -f Magenta

2026-07-17 00:53:12 $url: "testsetup.ru" 2026-07-17 00:53:17 $url: "heihei.ru"

Автор статьи: Андрей Олегович

Похожие статьи
Windows
PowerShell
Alias
Запросы к REST API
Пользователи
Сеть
Установка
Файлы
Функции
Циклы
ExecutionPolicy
if
GetType()
param
Write-Host

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

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

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: