无法捕获Write-Warning生成的警告输出(进入WarningVariable)

时间:2013-05-07 18:02:51

标签: powershell error-handling powershell-v2.0

考虑这一行:

Write-Warning "test" -wv +t

如果我之后运行此并验证$t的内容,我会得到:

Message   InvocationInfo                             PipelineIterationInfo
-------   --------------                             ---------------------
test      System.Management.Automation.Invocation... {0, 0, 0}

这就是我的期望。

现在,如果我将这行代码转换为脚本,就像这样:

function WarnTest {
    [CmdletBinding()]
    param()
    Write-Warning "test" 
}

然后进行一个简单的函数调用:

WarnTest -wv +q
$q

$q仍为空。我对此感到有些困惑 - 我的印象是[CmdletBinding()]确保函数中的任何写警告都会被发送到警告流,因此可能会被-WarningVariable捕获参数。

任何人都可以对此有所了解吗?

我需要这个的目的是测试哪些服务器在线(并将它们发送到标准输出)的功能,我还可以捕获那些离线的服务器的警告。

1 个答案:

答案 0 :(得分:2)

在v2上试试这个:

function WarnTest {
    [CmdletBinding()]
    param()
    $pscmdlet.WriteWarning("test")
}

您的原始功能似乎在PowerShell v3上正常运行。