2013-05-07 33 views
1

考虑这条线产生的报警输出:不能捕捉写警告(成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来捕获。

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

我需要的目的是测试哪些服务器在线(并将这些服务器发送到标准输出),我也可以捕获那些处于脱机状态的警告。

回答

2

试试这个在V2:

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

你原有的功能似乎对PowerShell的V3正常工作。

+0

再次保存一天。我不知道为什么它不适用于V2,但我很高兴我有一个解决方法。谢谢! – Joost 2013-05-08 07:50:20