Как вывести что-то в PowerShell
Я запускаю сценарий PowerShell из пакетного файла. Скрипт выбирает веб-страницу и проверяет, является ли содержимое страницы строкой "OK".
сценарий PowerShell возвращает уровень ошибки в пакетный сценарий.
пакетный скрипт выполняется ScriptFTP, программа автоматизации FTP. Если возникает ошибка, Я могу отправить ScriptFTP полный вывод консоли администратору по электронной почте.
в сценарии PowerShell я бы например, выводить возвращаемое значение с веб-сайта, если оно не "ОК", поэтому сообщение об ошибке включается в вывод консоли и, следовательно, в почту состояния.
Я новичок в PowerShell и не уверен, какую функцию вывода использовать для этого. Я вижу три:
- Write-Host
- Write-Output
- Write-Error
что было бы правильно использовать для записи в эквивалент Windows stdout?
7 ответов:
просто выводить что - то-это вещь красоты-и одна из ее самых сильных сторон. Например, общий Привет, Мир! приложение сводится к одной строке:
"Hello, World!"он создает объект string, присваивает вышеупомянутое значение и, будучи последним элементом в командном конвейере, вызывает
.toString()метод и выводит результат вSTDOUT(по умолчанию). Вещь красоты.другое
Write-*команды используются для вывода текст к их связанным потокам и имеет свое место как таковое.
Я думаю, в этом случае вам понадобится Write-Output.
если у вас есть скрипт типа
Write-Output "test1"; Write-Host "test2"; "test3";затем, если вы вызываете скрипт с перенаправленным выводом, что-то вроде
yourscript.ps1 > out.txt, выtest2на экранеtest1\ntest3\nВ "out.формат txt."обратите внимание ,что "test3" и строка вывода записи всегда будут добавлять новую строку в ваш текст, и в PowerShell нет способа остановить это (то есть
echo -nневозможно в PowerShell с собственные команды). Если вы хотите (несколько простой и легкий в Баш) функцииecho -nзатем посмотреть samthebest это!--10-->.если пакетный файл выполняет команду PowerShell, он, скорее всего, захватит команду записи-вывода. У меня были "долгие дискуссии" с системными администраторами о том, что должно быть написано на консоли, а что нет. Мы договорились, что единственная информация, если сценарий выполнен успешно или умер, должно быть
Write-Host'ed, и все, что автору скрипта может понадобиться знать о выполнении (какие элементы были обновлены, какие поля были установлены и т. д.), идет на запись-вывод. Таким образом, когда вы отправляете скрипт системному администратору, он может легкоrunthescript.ps1 >someredirectedoutput.txtи посмотреть на экране, если все в порядке. Затем отправьте " someredirectedoutput.txt " вернемся к разработчикам.
вы можете использовать любой из них в своем сценарии, так как они записываются в потоки по умолчанию (вывод и ошибка). Если бы вы передавали вывод в другой командлет, вы бы хотели использовать Write-Output, который в конечном итоге закончится в Write-Host.
в этой статье описываются различные параметры вывода:PowerShell O предназначен для вывода
Я думаю следующее-Хороший экспонат Эхо и Write-Host. Обратите внимание, как test() фактически возвращает массив ints, а не один int, как можно было бы легко поверить.
function test { Write-Host 123 echo 456 # AKA 'Write-Output' return 789 } $x = test Write-Host "x of type '$($x.GetType().name)' = $x" Write-Host "`$x[0] = $($x[0])" Write-Host "`$x[1] = $($x[1])"терминальный выход вышеуказанного:
123 x of type 'Object[]' = 456 789 $x[0] = 456 $x[1] = 789
вы просто не можете получить PowerShell, чтобы опустить эти отвратительные строки. Нет никакого сценария или командлета, который делает это.
конечно, Write-Host-это абсолютная ерунда, потому что вы не можете перенаправить/pipe с него! Вы просто должны написать свой собственный:
using System; namespace WriteToStdout { class Program { static void Main(string[] args) { if (args != null) { Console.Write(string.Join(" ", args)); } } } }например.
PS C:\> writetostdout finally I can write to stdout like echo -n finally I can write to stdout like echo -nPS C:\>
Write-Host "Found file - " + $File.FullName -ForegroundColor Magentaпурпурный может быть одним из " системы.ConsoleColor " значения перечислителя-черный, темно-синий, Темно-зеленый, темно-красный, темно-красный, темно-желтый, серый, темно-серый, синий, зеленый, голубой, красный, пурпурный, желтый, белый.
The
+ $File.FullNameявляется необязательным, и показывает, как поместить переменную в строку.
используйте внешнюю программу как внутри вашего сценария PowerShell:
cmd /c echo "Long string: $LongStr"это глупо и дорого с точки зрения запуска отдельного процесса, но PowerShell плохо спроектирован.
Comments