2xM*_*Max 2 powershell powershell-3.0
我想调用任意表达式并将 std 错误重定向到变量而不重定向到文件。
例如,在 Powershell 中,可以使用 2> 运算符重定向标准错误。使用临时文件,我可以轻松获得我想要的内容:
#$expr = "1/0" # with std error
#$expr = "2+2" # without stderror
#$expr = "Get-Service invalidsvc" # with stderror
$expr = "try { throw '111' } catch { }" # without std error
$ans = Invoke-Expression $expr -ErrorVariable ev 2> C:\log\stderr.txt
if(cat C:\log\stderr){
Write-Host "Error $ev"
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做同样的事情,但不创建临时输出文件?
错误的解决方案:
使用 -ErrorVariable 开关。反例:
Invoke-Expression $expr -ErrorVariable ev 2> C:\aaa\file1.txt $expr = "try { throw '111' } catch { }" Write-Host "Error $ev" # 将输出错误,但标准错误是空的
$LASTEXITCODE 和 $? 查看。反例:
获取服务无效服务
$lastexitcode 等于 0,$? 等于 True,但 std error 不为空
这个想法很简单:将 Powershell 控制台中的“红色”(标准错误)文本保存在变量中。我收到的命令是任意字符串。例子:
当我在 Powershell 控制台中编写“try { throw '111' } catch { }”时,PS 控制台中不会出现红色(错误)文本(尽管 $error 不为空)。因此,如果我在代码中调用该表达式,则某些变量中不会保存任何错误。
当我写“Get-Service noteexistingservice”、“1/0”或“Write-Error 111”时,将会出现红色(错误)文本和非空 $error。因此,如果我在代码中调用该表达式,我希望将错误保存在某个变量中。
将标准输出和标准错误保存到单独的变量中。如果没有美元符号,它将无法工作(来自 Windows Powershell in Action)。
$err = $( $output = get-childitem foo3 ) 2>&1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3584 次 |
| 最近记录: |