Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posh.pdf
Скачиваний:
32
Добавлен:
09.04.2015
Размер:
516.51 Кб
Скачать

Другие типы вывода, которые не могут быть захвачены

В предыдущей части мы видели один случай особого типа вывода - Write-Host, который не участвует в потоке вывода stdout. По сути, этот тип вывода никак не может быть получен, кроме вывода на экран. То, что является параметром -object командлета Write-Host, выводится прямо в консоль хоста, минуя поток вывода stdout. Поэтому в отличие от stderr вывода, который может быть захвачен, как показано ниже, вывод Write-Host не использует потоки и, следовательно, не может быть перенаправлен.

PS> $result = remove-item ThisFilenameDoesntExist 2>&1

PS> $result | foreach {$_.GetType().Fullname}

System.Management.Automation.ErrorRecord

Вывод Write-Host может быть получен только использованием командлета Start-Transcript. StartTranscript записывает все события, происходящие в течение сессии PowerShell, за исключением, к сожалению, вывода унаследованных приложений (то есть записываются все команды, вводимые пользователем, и все выходные данные, которые отображаются в консоли). Имейте в виду, что StartTranscript предназначен больше для записи сессии, чем записи событий отдельного сценария. Например, если вы обычно запускаете Start-Transcript в вашем профиле для записи сеанса PowerShell, сценарий, содержащий команду Start-Transcript будет вызывать ошибку, потому что нельзя запустить "вложенную" запись. В этом случае необходимо сначала остановить предыдущую запись сеанса.

Вот список типов вывода, которые не могут быть захвачены, кроме как используя Start-Transcript:

1.Прямой вывод на экран с использованием Write-Host & Out-Host

2.Вывод отладочной информации в консоль с помощью Write-Debug или параметра -Debug командлета

3.Вывод предупреждающих сообщений с помощью Write-Warning

4.Вывод дополнительных подробных сведений, которые могут осуществлять многие командлеты при указании параметра -Verbose

5.Потоки stdout или stderr непосредственно исполняемого файла

Вот и все. Просто всегда помните о том, что операторы и выражения участвуют в выводе функций в PowerShell. Вы должны всегда проверять, что вывод происходит именно так, как вы планировали.

13

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]