none
Проблема с переменной $error при запуске скрипта через консоль. RRS feed

  • Вопрос

  • Столкнулся с такой интересной проблемой. Дело в том что используя сторонний командлет pgp не получается использовать поток ошибок выгружаемый в переменную $error причем это только в том случае если скрипт запущен через консоль, в script editor -е всё работает.

    т.е. скриптблок запущеный через консоль pgp --verify file.sig ; write $error >> C:\file.txt при этом файл нулевой

    а то же самое, но в script editor -е  file.txt содержит ошибки т.е. всё ок.

    С чем это может быть связано и как обойти этот узкий момент.

     

    Спасибо за ответы.

    13 июня 2011 г. 13:03

Ответы

  • Такое поведение наблюдается в консоли PowerShell он не генерирует ошибку,когда приложение записывает в stderr,другое поведение наблюдается в powershell ISE и при использовании скажем Job(фоновых заданий),приложение пишет в стандартный поток ошибок и в этом случае генерируется исключение NativeCommandError.

    В прошлой теме ,01MDM, привел решение  - $ver_sig = pgp --verify $a 2>&1 ( Перенаправление потока ошибок в поток вывода,в этом случае генерируется исключение NativeCommandError и мы уже можем работать,как с переменной $ver_sig,так и с $error)

    Другой пример использование .Net(исключение не генерируется):

    $info = New-Object System.Diagnostics.ProcessStartInfo -Property @{
    			"FileName" = "pgp"
    			"Arguments" = "--verbose $a"
    			"UseShellExecute" = $false
    			"RedirectStandardError" = $true
    			}
    
    $pr = New-Object System.Diagnostics.Process
    $pr.StartInfo = $info
    [void]$pr.Start()
    $sig_verif = $pr.StandardError.ReadToEnd()
    


     Еще,как вариант использовать Job:

    Start-Job { route -rte}
    Get-Job | Receive-Job -Keep
    $error
    




    • Помечено в качестве ответа Tualantin 14 июня 2011 г. 12:37
    13 июня 2011 г. 14:29
    Отвечающий