Как запустить команду с параметрами и сохранить код выхода в переменной

#powershell

#powershell

Вопрос:

Привет, эксперты по переполнению стека

В настоящее время я пытаюсь запустить exe-файл из сценария PowerShell и хотел бы сохранить код выхода в переменной.

При самостоятельном запуске из командной строки Windows синтаксис выглядит следующим образом:

C:MyProgrammycommand.exe --option1=value1 --option2=value2 --option3=value3

В Powershell я могу выполнить вышеуказанное с помощью оператора вызова:

 $myExe="C:MyProgrammycommand.exe"
$options = @(
                "--option1=value1"
                "--option2=value2"
                "--option3=value3"
            )
amp; $myExe @options
  

но я не уверен, как назначить код выхода, возвращаемый exe-файлом, в переменную.

До сих пор это то, что я пробовал:

  1. Попробовал следующий синтаксис:
 $myVariable | amp; $myExe @options
  

но переменной не присваивается значение

  1. Используется Tee-объект
 amp; $myExe @options | Tee-Object $myVariable
  

но я получаю ошибку ParameterBindingValidationException

  1. Создал систему.Диагностика.Объект процесса
 $ps = New-Object System.Diagnostics.Process
$ps.StartInfo.FileName = "C:MyProgrammycommand.exe"
$ps.StartInfo.Arguments = "--option1=value1 --option2=value2 --option3=value3"
$ps.StartInfo.RedirectStandardOutput = $True
$ps.StartInfo.UseShellExecute = $False
$ps.Start()
$ps.WaitForExit()
  

что позволяет мне получить код выхода, вызвав $ps.ExitCode, но exe работает некорректно.
Ошибок не возникает, но похоже, что параметры считываются неправильно.

Есть какие-либо рекомендации по тому, как этого можно достичь?

Комментарии:

1. $lastexitcode уже должен содержать его?

2. Что заставляет вас думать, что exe-файл запускается некорректно?

Ответ №1:

После завершения работы исполняемого файла PowerShell заполнит $LASTEXITCODE переменную кодом выхода:

 $myExe="C:MyProgrammycommand.exe"
$options = @(
                "--option1=value1"
                "--option2=value2"
                "--option3=value3"
            )
$outputFromExe = amp; $myExe @options

return [pscustomobject]@{
  Program = $myExe
  ExitCode = $LASTEXITCODE
  Output = $outputFromExe
}