繁体   English   中英

PowerShell写错误

[英]PowerShell 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块。 但是,它将错误消息“ Hey”写入$ error变量,并将所有其他属性留空。

function myErr { try { write-error "Hey" } catch { write-host "Ups" } }

但是,错误消息将显示错误发生在myErr的第1行,字符1。

好的,我看到这似乎是调用write-error时的标准行为。 我将使用write-output

代替这个:

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM