Главная

Sunday, 26 April 2020

Консольный вывод в Powershell.

Всем привет.

Самый простой вариант консольного вывода в Powershell это использование командлета Write-Host. Кроме него есть еще Write-Output и Write-Verbose.

$EventSource = "Powershell CLI"
$Message = "PowerShell version 3 or higher is required!"

Пример для Write-Host:
$Message1 = 'Host:' + $Message
Write-Host $Message1

Пример для Write-Output:
$Message2 = 'Output:'+$Message
Write-Output $Message2

Write-Output генерирует выходной сигнал. Этот вывод может перейти к следующей команде после конвейера или консоли, чтобы он просто отображался. Командлет отправляет объекты по основному конвейеру, также известному как «выходной поток» или «конвейер успеха».

Еще пример:
Write-Output 'My text' | Out-File -FilePath "$env:TEMP\Test.txt"
Write-Output 'Bob' | ForEach-Object {
    "My name is $_"
}

Командлет Write-Output отправляет указанный объект по конвейеру в следующую команду.
Если команда является последней командой в конвейере, объект отображается в консоли.
Интерпретатор PowerShell рассматривает это как неявный Write-Output. Поскольку поведение по умолчанию Write-Output - отображать объекты в конце конвейера, обычно нет необходимости использовать командлет. Например, Get-Process | Write-Output эквивалентен Get-Process .



Пример для Write-Verbose:
$VerbosePreference = "Continue"
$Message3 = 'Verbose:'+$Message
Write-Verbose $Message3

Для удобного журналирования можно добавить и парочку своих функций:

Function Write-Log
{
    $Message = $args[0]
    Write-EventLog -LogName Application -Source $EventSource -EntryType Information -EventId 1 -Message $Message
}

Function Write-VerboseLog
{
    $Message = $args[0]
    Write-Verbose $Message
    Write-Log $Message
}

Function Write-HostLog
{
    $Message = $args[0]
    Write-Output $Message
    Write-Log $Message
}

$Message4 = 'Log:'+$Message
Write-Log $Message4
$Message5 = 'VerboseLog:'+$Message
Write-VerboseLog $Message5
$Message6 = 'HostLog:'+$Message
Write-HostLog $Message6

Чтобы отправить объекты ошибок в конвейер ошибок, используйте Write-Error: Write-Error $Message1 или Throw $Message1.

Сообщения в Powershell также могут получить вывод с помощью:

Write-Verbose "Detailed Message"
Write-Information "Information Message"
Write-Debug "Debug Message"
Write-Progress "Progress Message"
Write-Warning "Warning Message"

Каждый из командлетов имеет переменную предпочтения:

$VerbosePreference = "SilentlyContinue"
$InformationPreference = "SilentlyContinue"
$DebugPreference = "SilentlyContinue"
$ProgressPreference = "Continue"
$WarningPreference = "Continue"

Переменная предпочтения контролирует, как обрабатывается сообщение и последующее выполнение скрипта:

$InformationPreference = "SilentlyContinue"
Write-Information "This message will not be shown and execution continues"

$InformationPreference = "Continue"
Write-Information "This message is shown and execution continues"

$InformationPreference = "Inquire"
Write-Information "This message is shown and execution will optionally continue"

$InformationPreference = "Stop"
Write-Information "This message is shown and execution terminates"

Цвет сообщений можно контролировать для Write-Error , установив;
$host.PrivateData.ErrorBackgroundColor = "Black"
$host.PrivateData.ErrorForegroundColor = "Red"

Аналогичные настройки доступны для Write-Verbose , Write-Debug и Write-Warning.

Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?