Каков аналог команды Echo в PowerShell?
Команда Echo — это распространенный способ вывода чего-либо в консоль при использовании пакетных или оболочных сценариев. Но в PowerShell Echo не является фактическим командлетом. Так что является эквивалентом PowerShell для вывода чего-либо?
При написании скриптов вам часто нужно выводить что-то в консоль для тестирования или отладки вашего скрипта. В старых bat-скриптах, например, вы могли использовать команду Echo для этого. Но в PowerShell у вас есть на самом деле несколько вариантов.
В этой статье мы рассмотрим различные варианты в PowerShell.
Вывод PowerShell
В PowerShell вы действительно можете использовать команду Echo. Однако это не является фактическим командлетом, а является псевдонимом для командлета Write-Output.
Если мы возьмем приведенный ниже пример, то 4 фрукта из массива будут отображены в вашем консоли.
$fruitsAvailable = @("Apple", "Banana", "Orange", "Grapes")
$fruitsAvailable | ForEach-Object {
echo $_
}
Но, как вы, вероятно, знаете, в PowerShell также есть команда Write-Host. И есть важное различие между Write-Host и Write-Output, которое вам необходимо понять.
Команда Write-Output, а также ее псевдоним Echo, будут записывать результаты в поток вывода. В то время как команда Write-Host вернет результаты в хост, часто в вашу консоль PowerShell.
Мы можем показать разницу на следующих примерах. Код ниже будет проходить по массиву фруктов и возвращать все фрукты.
$results = $fruitsAvailable = @("Apple", "Banana", "Orange", "Grapes")
$results = $fruitsAvailable | ForEach-Object {
Write-Host "Processing fruit $($_)"
$_
}Если вы запустите приведенный выше код, то в вашем консоли вы увидите следующее:
Processing fruit Apple
Processing fruit Banana
Processing fruit Orange
Processing fruit GrapesИ если вы посмотрите на переменную результатов, то получите список всех фруктов из массива:
Apple
Banana
Orange
GrapesНо что если мы изменим Write-Host на Write-Output? Write-Output отправит результаты в поток вывода, который в данном случае является переменной $results. Но это также может быть текстовый файл, когда вы перенаправляете вывод.
$results = $fruitsAvailable = @("Apple", "Banana", "Orange", "Grapes")
$results = $fruitsAvailable | ForEach-Object {
Write-Host "Processing fruit $($_)"
$_
}Итак, если вы запустите вышеуказанный код, вы ничего не увидите в консоли. Однако, если мы посмотрим на переменную $results, то увидим следующее:
Processing fruit Apple
Apple
Processing fruit Banana
Banana
Processing fruit Orange
Orange
Processing fruit Grapes
GrapesКогда использовать Write-Output или Write-Host
Кодлета Write-Output технически не требуется, потому что запись в поток вывода является поведением по умолчанию в PowerShell.
Итак, если вы хотите показать прогресс вашего скрипта в консоли или быстро вернуть переменную, чтобы протестировать часть вашего скрипта, то Write-Host — это лучший вариант. Преимущество Write-Host в том, что вы также можете назначить разные цвета для вывода в консоль.
Еще один вариант, который стоит иметь в виду, это Write-Verbose. Подробный вывод по умолчанию скрыт, но вы можете изменить это, установив переменную $VerbosePreference в continue в вашей сессии PowerShell (или в начале вашего скрипта). Таким образом, весь подробный вывод будет отображаться.
Аналогичным вариантом является командлет Write-Debug, который вы можете включить с помощью $DebugPreference="Continue".
Заключение
Подводя итог, вы можете использовать Echo в PowerShell, но это на самом деле не нужно, и существуют лучшие варианты для отладки вашего кода или возврата результатов в консоль.
Надеюсь, вам понравится эта статья. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.
