1

考虑这一行:

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

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

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

4

1 回答 1

2

在 v2 上试试这个:

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

您的原始功能似乎在 PowerShell v3 上正常工作。

于 2013-05-08T02:26:55.063 回答