Powershell存在输出重定向/捕获问题,请尝试捕获和外部EXE

Powershell存在输出重定向/捕获问题,请尝试捕获和外部EXE,powershell,powershell-1.0,Powershell,Powershell 1.0,首先,要么A)我调查得不够仔细,要么B)我发现了一个问题,需要一些时髦的黑客。顺便说一下,这是posh v1.0 下面是: 大约一周前,我问了一个问题,关于重定向powershell中执行EXE时的输出,否则不会被捕获。我很快就收到了“2>&1”,解决了这个问题 现在,我遇到了另一个障碍,希望看看你们中的一些stackoverflowers公司能给它带来什么 作为一名优秀的程序员,我在代码中使用try-catch块。当我去调用GPG(gnupg.org)时,向它传递了几个命令,如下所示: try

首先,要么A)我调查得不够仔细,要么B)我发现了一个问题,需要一些时髦的黑客。顺便说一下,这是posh 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块的外部执行相同的调用,则文本文件会按预期写入一些文本

我想知道的是,输出重定向到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
    }
};

看起来您正在使用带有-Catch参数的自定义Try函数。介意分享一下您的实现,看看这是否会导致问题吗

顺便说一句,除非您将$lastexitode-ne 0的非终止错误条件转换为终止错误,否则我怀疑您的catch语句是否会被调用。在这种情况下,使用这样的函数可能会更好。我经常使用它(非常方便):

像这样使用它:

& $gpgExeLocation --import $keyFileName 2>&1 | out-file "theOutput.txt"
CheckLastExitCode

我很高兴,没读你的密码。我要试试看会发生什么。我很感激,成功!使用一些错误的参数调用gpg,它很容易捕获返回代码。我很感谢你花时间帮忙。干杯对于powershell 2.0仍然有效吗?
& $gpgExeLocation --import $keyFileName 2>&1 | out-file "theOutput.txt"
CheckLastExitCode