Ошибка записи PowerShell

Я кодировал простую функцию журнала, которая вызывает командлет Write-Error, Однако это приводит к неожиданному поведению. Чтобы дать вам пример:

function foo {
    Param([string]$Msg = "This is an error")
    Write-Error $Msg
}

призвание foo результаты в следующем:

foo: это ошибка
В строке:1 символ:1
+ фу

Итак, кажется, что зовет foo (и командлет Write-Error в нем), выдает ошибку, что PS ссылается на функцию foo сам.

Как правильно написать сообщение в поток ошибок PS, но не выглядеть как ошибка в вызывающей функции?

Я нашел ответ: разница немного тонкая: есть разница между выдачей ошибки и выводом сообщений об ошибках в стандартный поток ошибок. В структуре try/catch выбрасывание ошибки приведет к переходу в блок catch. При использовании write-error в блоке try будет просто направлять вывод в стандартный поток ошибок. Следующая функция не войдет в блок catch. Однако он записывает сообщение об ошибке "Hey" в переменную $error и оставляет все остальные атрибуты пустыми.

function myErr { try { write-error "Hey" } catch { write-host "Ups" } }

Сообщение об ошибке, однако, покажет, что ошибка произошла в myErr в строке 1, символ 1.

Итак, я вижу, что это кажется стандартным поведением при вызове write-error, я использую write-output затем.

1 ответ

Вместо этого:

function foo {
    Param([string]$Msg = "This is an error")
    Write-Error $Msg
}

Используйте для этого запись-вывод. Это нормальное поведение ошибки записи в PS:

function foo {
    Param([string]$Msg = "This is an error")
    Write-Output $Msg
}
Другие вопросы по тегам