将标准错误重定向到 PowerShell 中的变量

Abl*_*lue 19 powershell

我想编写一个 dcdiag 测试脚本以在发现任何错误时提醒我。我以为我可以通过以下方式在 PowerShell 中执行此操作...

$test = dcdiag 2>$err
Run Code Online (Sandbox Code Playgroud)

我目前没有来自 dcdiag 的任何错误,所以我无法直接测试,但我编写了另一个 PowerShell 脚本来抛出异常,希望我可以使用该脚本测试此方法。使用上述方法不起作用,所以我选择了:

try {
    $test = dcdiag
}
catch { 
    $err = $_.Exception.Message
}
Run Code Online (Sandbox Code Playgroud)

它适用于我的测试用例,但我不知道这是否会从 dcdiag 中获取标准错误。

鉴于我想将它与 dcdiag 一起使用,我应该如何最好地实现标准错误重定向到 PowerShell 中的变量?

man*_*lds 21

try...catch 在这种情况下无济于事。

你可能想要这样做:

$test = dcdiag 2>&1
$err = $test | ?{$_.gettype().Name -eq "ErrorRecord"}
if($err){
    # Error has occurred
}
Run Code Online (Sandbox Code Playgroud)

  • 啊,原来的问题我没说;是否可以同时保留标准输出和标准错误?即 $test = stdout 和 $err = stderr? (3认同)
  • @Ablue - `$test` 两者都有,这就是我将错误过滤为 `$err` 的原因。 (2认同)
  • @Simon 正确,我说过不要使用 SilentlyContinue。 (2认同)