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

В чем разница между Write-Host и Write-Output в PowerShell?

Подобно...

Write-Host "Hello World ";

Write-Output "Hello World";

6 ответов

Решение

В двух словах, Write-Host пишет в самой консоли. Думайте об этом как MsgBox в VBScript. Write-Outputс другой стороны, выполняет запись в конвейер, поэтому следующая команда может принять его в качестве входных данных. Вы не обязаны использовать Write-Output для того, чтобы писать объекты, как Write-Output неявно призван для вас.

PS> Get-Service

будет так же, как:

PS> Get-Service | Write-Output

Write-Output отправляет вывод в конвейер. Оттуда он может быть передан другому командлету или назначен переменной. Write-Host отправляет его прямо на консоль.

$a = 'Testing Write-OutPut'  | Write-Output
$b = 'Testing Write-Host' | Write-Host

Get-Variable a,b

Выходы:

Testing Write-Host

Name                           Value                                                                 
----                           -----                                                                 
a                              Testing Write-OutPut                                                  
b                                                  

Если вы не скажете Powershell, что делать с выводом в конвейер, присваивая его переменной или передавая его другой команде, тогда он отправляется в out-default, который обычно является консолью, поэтому конечный результат выглядит одинаково,

Write-Output отправляет данные как объект через конвейер. В примере вопросов он просто передаст строку.

write-host зависит от хоста. В консоли write-host по сути дела [console]::WriteLine, Смотрите это для получения дополнительной информации.

Еще одно различие между Write-Host и Write-Output:

  • Write-Host отображает сообщение на экране, но не записывает его в журнал

  • Write-Output записывает сообщение в журнал, но не отображает его на экране.

И Write-Host считается вредным. Вы можете увидеть подробное объяснение в " Write-Host считать вредным".

Еще одна вещь оWrite-Hostvs : встроенная конкатенация строк может работать не так, как ожидалось.

      $sampleText = "World"    
Write-Host "Hello" $sampleText

возвращается

      Hello World

но

      $sampleText = "World"    
Write-Output "Hello" $sampleText

возвращается

      Hello
World

Это будет поощрятьWrite-Outputс переменной (и использованием конкатенации), содержащей сразу всю строку.

      $hw = "Hello " + $sampleText
Write-Output $hw

Вы можете понять разницу между двумя cmds на примере ниже:

Запись хоста "msgtxt" | Get-Service При запуске выше вы получите вывод как "msgtxt"

Запись-вывод "msgtxt" | Get-Service При запуске, описанном выше, вы получите сообщение об ошибке, поскольку msgtxt не является именем какой-либо службы (в идеальном состоянии) (поскольку вы записываете его в конвейер, и он передается в качестве входных данных в Get-Service)

Другие вопросы по тегам