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



考虑这一行:

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参数捕获。

有人能解释一下吗?

我需要这个函数的目的是测试哪些服务器是在线的(并将这些服务器发送到标准输出),其中我还可以捕获脱机服务器的警告。

在v2上试试:

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

你原来的功能似乎在PowerShell v3上正常工作。

最新更新