У чому різниця між Write-Host та Write-Output у PowerShell?
Люблю...
Write-Host "Hello World ";
Write-Output "Hello World";
У чому різниця між Write-Host та Write-Output у PowerShell?
Люблю...
Write-Host "Hello World ";
Write-Output "Hello World";
Відповіді:
У двох словах, 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, що робити з висновком на конвеєр, призначивши його змінній або подавши його до команди anoher, тоді він надсилається на вихід за замовчуванням, що зазвичай є консоллю, тому кінцевий результат виглядає однаковим .
Write-Output
передає дані як об’єкт через конвеєр. У прикладі "Питання" він просто передасть рядок.
write-host
залежить від хоста. У консолі write-host
це по суті робиться [console]::WriteLine
. Дивіться це для отримання додаткової інформації.
Write-Ouput
відправляє об'єкти. Цього разу це був рядок, але загалом він надсилатиме об’єкти, і його зазвичай не потрібно використовувати, оскільки це стандартний спосіб виведення результатів / даних :)
Ще одна відмінність між Write-Host і Write-Output:
Write-Host відображає повідомлення на екрані, але він не записує його в журнал
Write-Output пише повідомлення в журнал, але воно не відображає його на екрані.
А Write-Host вважається шкідливим. Ви можете побачити детальне пояснення в " Написати хосту, який вважається шкідливим" .
Write-Output
що повідомлення відображається на екрані, якщо ви запускаєте сценарій самостійно. Отже, я не впевнений, що ви маєте на увазі під "Write-Output пише повідомлення в журнал, але воно не відображає його на екрані". ?
Ви можете зрозуміти різницю між двома cmds на наведеному нижче прикладі:
Хост запису "msgtxt" | Get-Service При запуску вище, ви отримаєте результат у вигляді "msgtxt"
Запис-вихід "msgtxt" | Get-Service При запуску вище ви отримаєте повідомлення про помилку, оскільки msgtxt не є назвою жодної служби. (В ідеальному стані) (оскільки ви пишете його в конвеєр, і він передається як вхід до Get-Service)