Лучший способ написать на консоль в PowerShell
У меня немного путают различные способы печати (эхо) на консоль. Я видел, что есть несколько способов записи вывода на консоль, например:
Write-Host "Hello world1"
"Hello World2"
Out-Host -InputObject "Hello World3"
Все три способа будут печататься на консоли. Среднее является чем-то более простым и менее подробным и более простым в использовании. Я также обнаружил, что когда вы пишете такую функцию, как:
function GetValues()
{
"1"
"2"
}
Он по-прежнему возвращает две строки в конвейере:
И я все еще могу распечатать значения:
foreach ($s in GetValues)
{
Write-Host "s: " $s
}
Я обнаружил, что использование только строки с кавычками не всегда появляется на пользовательских хостах и что мне пришлось использовать Write-Host для получать значения для печати на пользовательских хостах.
Как-то я нахожу это запутанным. Предполагается, что "Print something"
является псевдонимом Write-Host
или в чем заключается цель?
Ответы
Ответ 1
Поведение PowerShell по умолчанию - это просто сбрасывать все, что выпадает из конвейера, не будучи взятым другим элементом конвейера или назначаться переменной (или перенаправлено) на Out-Host
. Что Out-Host
делает, очевидно, зависит от хоста.
Простое отключение от конвейера не заменяет Write-Host
, которое существует только по причине вывода текста в хост-приложение.
Если вы хотите вывод, используйте командлеты Write-*
. Если вы хотите вернуть значения из функции, то просто сбрасывайте объекты там без командлета.
Ответ 2
Средняя запись записывается в конвейер. Write-Host
и Out-Host
записываются на консоль. "echo" - это псевдоним для Write-Output
, который также записывается в конвейер. Лучший способ написать на консоль будет использовать командлет Write-Host
.
Когда объект записывается в конвейер, он может потребляться другими командами в цепочке. Например:
"hello world" | Do-Something
но это не сработает, поскольку Write-Host
записывает на консоль, а не в конвейер (Do-Something не получит строку):
Write-Host "hello world" | Do-Something