[英]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.