Запуск EXE-файла с помощью сценария PowerShell


112

Я пытаюсь запустить EXE-файл с помощью сценария PowerShell. Если я использую командную строку, она работает без проблем (сначала я указываю имя исполняемого файла и ряд параметров для его вызова):

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

Но выполнение того же самого внутри скрипта возвращает ошибку:

Термин «C: \ Program Files \ Automated QA \ TestExecute 8 \ Bin \ TestExecute.exe" C: \ temp \ TestProject1 \ TestProject1.pjs / run / exit / SilentMode » не распознается как имя командлета, функция , файл сценария или работающая программа. Проверьте написание имени или, если был включен путь, проверьте правильность пути и повторите попытку.

(Я вызвал команду с помощью оператора «&».)

Как я могу исправить эту проблему?


4
Разместите свой код, пожалуйста. Так как именно в этом и заключается проблема, гораздо проще посмотреть на него, чем предположить.
Коди Грей

Ответы:


124
& "C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

или

[System.Diagnostics.Process]::Start("C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe", "C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode")

ОБНОВЛЕНИЕ: извините, я пропустил "(я вызвал команду, используя оператор" & ")". У меня возникла эта проблема, когда я оценивал путь динамически. Попробуйте конструкцию Invoke-Expression:

Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"

Странно, что команда в исходном вопросе почти точно работает для меня на виртуальной машине в PS2.0. Но эта же команда теперь не работает в системе PS4.0. Интересно, что я также вызываю TestExecute. Я думаю, что мне больше всего нравится вариант 2, я попробую, спасибо!
EJA

33

Похоже, вы указываете как EXE, так и его первый аргумент в одной строке, например; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Это не сработает. Обычно вы вызываете собственную команду, в пути которой есть пробел, например:

& "c:\some path with spaces\foo.exe" <arguments go here>

Ожидается, &что за ней будет следовать строка, которая идентифицирует команду: командлет, функция, относительный или абсолютный путь собственного исполняемого файла.

Как только вы получите эту работу:

& "c:\some path with spaces\foo.exe"

При необходимости начните цитировать аргументы. Хотя похоже, что ваши аргументы должны быть в порядке (без пробелов и других специальных символов, интерпретируемых PowerShell).


2
Есть ли способ выполнить сценарий PowerShell без полного пути, если сценарий и exe находятся в одной папке? Или можно использовать относительный путь?
guanome

7
Если exe находится в той же папке, вы можете это сделать, .\foo.exeа также можете использовать относительный путь ..\..\foo.exeи относительный путь с пробелами & '..\..\path with spaces\foo.exe'.
Кейт Хилл

Если у вас есть трубы в вашей команде , чем вы должны использовать кавычки: cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\".
larkee

2

В Powershell перейдите к папке с файлом .exe. Например:

cd C: \ Users \ Administrators \ Downloads

PS C: \ Users \ Administrators \ Downloads> & '. \ Aaa.exe'

Появится установщик и следуйте инструкциям на экране.


именно то, что я хочу! запустите файл .exe & '. \ aaa.exe'
Шариф Яздиан

2
  1. clone $ args
  2. вставьте свои аргументы в новый массив
  3. & $ path $ args

Демо:

$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()

$myArgs += '-p'
$myArgs += $env:NGINX_HOME

& $exepath $myArgs

Спасибо @nodoccat, сработал как шарм для запуска команды докера с очень длинным списком аргументов.
danidemi

1

Не будучи разработчиком, я нашел решение в запуске нескольких команд ps в одной строке. Например:

powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc

Помещая "(двойные кавычки) перед & (амперсандом), он выполняет исполняемый файл. Ни в одном из примеров, которые я обнаружил, это не упоминалось. Без двойных кавычек приглашение ps открывается и ожидает ввода.


Привет, Ричард. Можете ли вы улучшить форматирование своего ответа? В режиме редактирования предоставляется справка по форматированию, взгляните на нее.
Дориан Турба,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.