Как вывести что-то в PowerShell
Я запускаю сценарий PowerShell из пакетного файла. Скрипт извлекает веб-страницу и проверяет, является ли содержимое страницы строкой "OK".
сценарий PowerShell возвращает уровень ошибки пакетному сценарию.
пакетный скрипт выполняется с помощью ScriptFTP, программа автоматизации FTP. Если возникает ошибка, Я могу отправить scriptftp полный вывод консоли администратору по электронной почте.
в сценарии PowerShell я бы как вывести возвращаемое значение с веб-сайта, если оно не "ОК", поэтому сообщение об ошибке включается в вывод консоли и, следовательно, в сообщение о состоянии.
Я новичок в PowerShell и не уверен, какую выходную функцию использовать для этого. Я вижу три:
- Write-Host
- Написать-Выход
- Write-Error
что было бы правильным использовать для записи в эквивалент Windows stdout
?
7 ответов
просто выводить что - то-это вещь красоты-и одна из ее самых сильных сторон. Например, общий Привет, Мир! приложение сводится к одной строке:
"Hello, World!"
он создает объект string, присваивает вышеупомянутое значение и, будучи последним элементом в командном конвейере, вызывает .toString()
метод и выводит результат в STDOUT
(по умолчанию). Вещь красоты.
другое Write-*
команды используются для вывода текст к их связанным потокам, и имеют свое место как таковые.
Я думаю, в этом случае вам понадобится Написать-Выход.
если у вас есть скрипт типа
Write-Output "test1";
Write-Host "test2";
"test3";
тогда, если вы вызываете скрипт с перенаправленным выходом, что-то вроде yourscript.ps1 > out.txt
, вы test2
на экране test1\ntest3\n
В "out.формат txt."
обратите внимание, что "test3" и строка вывода записи всегда будут добавлять новую строку в текст, и в PowerShell нет способа остановить это (то есть echo -n
невозможно в PowerShell с native commands). Если вы хотите (несколько простой и легкий в Баш) функции echo -n
затем посмотреть ответ samthebest.
если пакетный файл запускает команду PowerShell, он, скорее всего, захватит команду Write-Output. У меня были "длинные обсуждения" с системными администраторами о том, что следует писать на консоль, а что нет. Мы договорились, что единственная информация, если сценарий выполнен успешно или умер, должно быть Write-Host
'ed, и все, что автор сценария, возможно, должен знать о выполнении (какие элементы были обновлены, какие поля были установлены и т. д.), идет на вывод записи. Таким образом, когда вы отправляете скрипт системному администратору, он может легко runthescript.ps1 >someredirectedoutput.txt
и посмотреть на экране, если все в порядке. Затем отправьте " someredirectedoutput.txt " вернемся к разработчикам.
вы можете использовать любой из них в своем сценарии, так как они записываются в потоки по умолчанию (вывод и ошибка). Если бы вы передавали вывод в другой командлет, вы хотели бы использовать Написать-Выход, который в конечном итоге завершится 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 " - черный, темно-синий, Темно-зеленый, темно-серый, темно-красный, темно-красный, темно-серый, темно-серый, синий, зеленый, голубой, красный, пурпурный, желтый, белый.
на + $File.FullName
является необязательным, и показывает, как поместить переменную в строку.
используйте внешнюю программу, как внутри вашего сценария PowerShell:
cmd /c echo "Long string: $LongStr"
это глупо и дорого с точки зрения запуска отдельного процесса, но PowerShell плохо спроектирован.