【问题标题】:PowerShell Write-ErrorPowerShell 写入错误
【发布时间】:2017-01-25 07:46:36
【问题描述】:

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

【问题讨论】:

  • Ehhh,错误是由函数引发的,为什么你不会有错误输出状态?
  • 尝试使用 try/catch 构造进行错误处理
  • Write-Error 就是这样工作的。如果您不想这样做,请使用Write-Output

标签: powershell exception-handling write-error


【解决方案1】:

而不是这个:

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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2013-03-13
    相关资源
    最近更新 更多