Разница между Echo и Write-Host в PowerShell ISE

Я начал изучать (новичок) о скрипте PowerShell. я нашел это echo и Write-Host оба могут отображать вывод на экране консоли, так в чем же между ними разница? Я прочитал этот ответ от Переполнение стека, но я не могу понять ответы на этот вопрос. Я хотел узнать разницу простым способом.

1 ответ
1

Я постараюсь объяснить вам это скорее философски, чем технически.

  • Write-Host используется для отображения информации в консоли. Он не записывается в выходной поток
  • echo, который на самом деле является псевдонимом Write-Output используется для вывода объектов операции

Обратите внимание на следующий пример:

Этот код здесь:

$Results = 0..10 | ForEach-Object {
    Write-Host "Current Number: $_"
    $_
}

В консоль выведет следующее:

Current Number: 0
Current Number: 1
Current Number: 2
Current Number: 3
Current Number: 4
Current Number: 5
Current Number: 6
Current Number: 7
Current Number: 8
Current Number: 9
Current Number: 10

И если вы отметите переменную $Results теперь вы можете это увидеть:

PS C:WINDOWSsystem32> $Results
0
1
2
3
4
5
6
7
8
9
10

Числа сохраняются в переменной, потому что $_ в строке нет. 3 был отправлен в выходной поток. Write-Host однако отправляется на хост, поэтому отображается в консоли, но не в переменной, поскольку ничего не создает в потоке вывода.

Что будет теперь, если мы изменим Write-Host к Write-Output?:

$Results = 0..10 | ForEach-Object {
    Write-Output "Current Number: $_"
    $_
}

Если мы запустим это, мы ничего не увидим в консоли, потому что весь выходной поток был сохранен в $Results Переменная. Если мы сейчас проверим эту переменную, она будет выглядеть так:

PS C:WINDOWSsystem32> $Results
Current Number: 0
0
Current Number: 1
1
Current Number: 2
2
Current Number: 3
3
Current Number: 4
4
Current Number: 5
5
Current Number: 6
6
Current Number: 7
7
Current Number: 8
8
Current Number: 9
9
Current Number: 10
10

Итак, как вы видите, если вы хотите распечатать простую информацию, которая действительно не имеет дальнейшего использования, кроме как просто информировать вас о том, что код в настоящее время делает, вы используете Write-Host

Если вы хотите вывести что-либо в выходной поток, вы используете Write-Output

Но держись! Есть еще кое-что.

Вам на самом деле не нужно Write-Output. Я пишу сценарии PowerShell уже около 5-6 лет и ни разу не использовал их. Почему? Поскольку запись в выходной поток выполняется в PowerShell по умолчанию. Если вы еще раз посмотрите на наши примеры, $_ в третьей строке всегда волшебным образом попадала в выходной поток, хотя я не использовал Write-Output.

Итак, чтобы подвести итог: используйте Write-Host для отображения информации в консоли, и я бы посоветовал не использовать echo/Write-Output потому что в любом случае это значение по умолчанию.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *