我编写了一个简单的 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
。