考虑这一行:
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上正常工作。