Лучший способ написать на консоль в 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