PowerShell写入错误

时间:2017-01-25 07:46:37

标签: powershell exception-handling write-error

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

1 个答案:

答案 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
}