По умолчанию (>
) выводит поток успеха (1
).Вы можете получить доступ к определенному потоку, добавив соответствующий номер потока к >
.Вы также можете перенаправить определенный поток в поток успеха с помощью синтаксиса (n>&1 > file.txt
), где n
- номер потока.Несколько потоков могут быть перенаправлены одновременно, как ошибки и подробности (6>&1 4>&1 > file.txt
).Для всех потоков можно использовать подстановочный знак вместо n
(*>
).
Альтернативный подход состоит в том, чтобы просто использовать блоки try-catch-finally
для перехвата ошибок и затем выполнять действия, основанные на условиях ошибки.
Вот базовый пример подробного перенаправления потока (4>>
) и всех потоков (*>>
) с проверкой ошибок.$?
возвращает true, если ранее выполненная команда была успешной.
Пример 1: Rename-Item
имеет ошибку.
rename-item verb1.txt verb2.txt -verbose *>> verbose.txt
if ($?) {
write-verbose "Rename-Item Was Successful" -Verbose 4>> verbose.txt }
else {
Write-Verbose "Rename-Item Failed" -Verbose 4>> verbose.txt }
Get-Content verbose.txt
rename-item: Невозможно переименовать, так как элемент в verb1.txt не имеетсуществовать.В строке: 1 символ: 1 + переименовать элемент verb1.txt verb2.txt -verbose * >> verbose.txt + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [Rename-Item], PSInvalidOperationException + FullyQualifiedErrorId:InvalidOperation, Microsoft.PowerShell.Commands.RenameItemCommand
Не удалось переименовать элемент
Пример 2: Rename-Item
не содержит ошибок.
rename-item verb2.txt verb1.txt -verbose *>> verbose.txt
if ($?) {
write-verbose "Rename-Item Was Successful" -Verbose 4>> verbose.txt }
else {
Write-Verbose "Rename-Item Failed" -Verbose 4>> verbose.txt }
Get-Content verbose.txt
Выполнение операции «Переименовать файл» на целевом объекте: Item: verb2.txt Место назначения: verb1.txt ".
Переименовать-элемент прошел успешно
См. About_Redirection для более подробной информации.