Прежде всего, A) Я не расследую это достаточно сложно или B) Я нашел проблему, требующую некоторого фанкового взлома. Кстати, это posh v1.0.Проблема с перенаправлением/захватом Ouput с Powershell и Try-Catch и внешним EXE
Вот он идет:
Через неделю или около того назад я задал вопрос о перенаправлении вывода из exection в качестве EXE в PowerShell, который в противном случае не поймали. Я быстро представил «2> & 1», который решил проблему.
Теперь я ударил еще одну загвоздка и надеюсь увидеть, что некоторые из вас могут использовать на стеке.
Я использую блоки 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 для начала?
вот моя реализация примерки поймать
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
}
};
меня вызвать счастливым и читать ваш техника его подводит код. Я собираюсь попробовать и посмотреть, что произойдет. Я ценю это. – CLR
Успех! Вызывается gpg с некоторыми плохими аргументами, и он легко поймал код возврата. Я ценю время, которое вы приняли, чтобы помочь. Ура! – CLR
по-прежнему действует для powershell 2.0? – Kiquenet