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