我编写了一个简单的Log函数,它调用了cmdlet Write-Error
。但是,这会产生一些意外的行为。举个例子:
function foo {
Param([string]$Msg = "This is an error")
Write-Error $Msg
}
调用foo
会产生以下结果:
foo: This is an error At line:1 char:1 + foo
因此,似乎调用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" } }
但是,错误消息将显示错误发生在{1}}第1行,char 1。
好吧,我看到这似乎是调用myErr
时的标准行为。我将使用write-error
。
答案 0 :(得分: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
}