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 |
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги