0

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

4

1 回答 1

0

而不是这个:

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
}
于 2017-01-25T11:29:44.033 回答