【发布时间】:2013-09-18 01:17:03
【问题描述】:
首先,要么 A) 我对此的调查不够努力,要么 B) 我发现了一个需要一些时髦的 hack 的问题。顺便说一句,这是豪华 v1.0。
这里是:
大约一周前,我问了一个关于重定向在 powershell 中执行 EXE 的输出的问题,否则不会被捕获。我很快就收到了解决问题的“2>&1”。
现在我遇到了另一个障碍,希望看看你们中的一些 stackoverflowers 能解决什么问题。
我在我的代码中使用了 try-catch 块,就像一个优秀的程序员应该做的那样。当我去调用 GPG (gnupg.org) 时,向它传递了一些命令,如下所示:
try `
{
& $gpgExeLocation --import $keyFileName 2>&1 | out-file "theOutput.txt";
} `
-Catch `
{
write-host "$_";
}
我得到一个空白文本文件 (theOutput.txt)。
但是,如果我在 try-catch 块的 outside 执行相同的调用,文本文件会按预期将一些文本写入其中。
我想知道的是,输出重定向到 stdout 是否存在问题以及 powershell 捕获异常的方式 - 还是我的 try-catch 代码开始?
这是我的 try-catch 实现
function global:try
{
param
(
[ScriptBlock]$Command = $(Throw "The parameter -Command is required."),
[ScriptBlock]$Catch = { Throw $_ },
[ScriptBlock]$Finally = {}
)
& {
$local:ErrorActionPreference = "SilentlyContinue"
trap
{
trap
{
& {
trap { Throw $_ }
&$Finally
}
Throw $_
}
$_ | & { &$Catch }
}
&$Command
}
& {
trap { Throw $_ }
&$Finally
}
};
【问题讨论】: