【发布时间】:2017-01-25 07:46:36
【问题描述】:
我编写了一个简单的 Log 函数,它调用 cmdlet Write-Error。但是,这会产生一些意想不到的行为。举个例子:
function foo {
Param([string]$Msg = "This is an error")
Write-Error $Msg
}
调用foo 会产生以下结果:
foo: 这是一个错误 在行:1 字符:1 + 富
因此,似乎调用 foo(以及其中的 cmdlet Write-Error)会引发错误,PS 链接到函数 foo 本身。
将消息写入 PS 错误流但又不会使其看起来像调用函数中的错误的正确方法是什么?
我找到了答案:区别有点微妙:抛出错误和将错误消息输出到标准错误流之间是有区别的。在 try/catch 结构中,抛出错误会跳到 catch 块中。在 try 块中使用 write-error 只会将输出通过管道传输到标准错误流中。以下函数不会进入 catch 块。但是,它会在 $error 变量中写入一条错误消息“Hey”,并将所有其他属性留空。
function myErr { try { write-error "Hey" } catch { write-host "Ups" } }
但是,错误消息将显示错误发生在 myErr 第 1 行字符 1 中。
好吧,我发现这似乎是调用write-error 时的标准行为。然后我将使用write-output。
【问题讨论】:
-
Ehhh,错误是由函数引发的,为什么你不会有错误输出状态?
-
尝试使用 try/catch 构造进行错误处理
-
Write-Error就是这样工作的。如果您不想这样做,请使用Write-Output。
标签: powershell exception-handling write-error