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

#powershell #audio #video #ffmpeg #winzip

#powershell #powershell-2.0

Вопрос:

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

 "C:Program FilesAutomated QATestExecute 8BinTestExecute.exe" C:tempTestProject1TestProject1.pjs /run /exit /SilentMode
 

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

Термин «»C:Program Файлы Автоматизированный КОНТРОЛЬ качестваTestExecute 8BinTestExecute.exe » C:tempTestProject1TestProject1.pjs /run /exit /SilentMode’ не распознается как имя командлета, функции, файла сценария или рабочей программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку.

(Я вызвал команду, используя оператор «amp;».)

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

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

1. Пожалуйста, опубликуйте свой код. Поскольку в этом и заключается проблема, рассмотреть ее гораздо проще, чем угадывать.

Ответ №1:

 amp; "C:Program FilesAutomated QATestExecute 8BinTestExecute.exe" C:tempTestProject1TestProject1.pjs /run /exit /SilentMode 

или

 [System.Diagnostics.Process]::Start("C:Program FilesAutomated QATestExecute 8BinTestExecute.exe", "C:tempTestProject1TestProject1.pjs /run /exit /SilentMode") 

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

 Invoke-Expression "amp; `"C:Program FilesAutomated QATestExecute 8BinTestExecute.exe`" C:tempTestProject1TestProject1.pjs /run /exit /SilentMode" 

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

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

Ответ №2:

Похоже, вы указываете как EXE, так и его первый аргумент в одной строке, например; . '"C:Program FilesAutomated QATestExecute 8BinTestExecute.exe" C:tempTestProject1TestProject1.pjs /run /exit /SilentMode' Это не сработает. В общем случае вы вызываете собственную команду, путь к которой имеет пробел, например:

 amp; "c:some path with spacesfoo.exe" <arguments go here>
 

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

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

 amp; "c:some path with spacesfoo.exe"
 

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

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

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

2. Если exe-файл находится в той же папке, вы можете сделать это .foo.exe , и вы также можете использовать относительный путь ....foo.exe и относительный путь с пробелами amp; '....path with spacesfoo.exe' .

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

Ответ №3:

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

cd C:UsersAdministratorsDownloads

PS C:UsersAdministratorsDownloads > amp; ‘.aaa.exe ‘

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

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

1. именно то, что я хочу! запустите EXE-файл amp; ‘. aaa.exe ‘

Ответ №4:

  1. клонировать $args
  2. поместите ваши аргументы в новый массив
  3. amp; $path $аргументы

ДЕМОНСТРАЦИЯ:

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

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

amp; $exepath $myArgs
 

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

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

Ответ №5:

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

 powershell "amp; 'c:path with spacestoexecutable.exe' -arguments ; second command ; etc
 

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

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

1. Привет, Ричард. Можете ли вы улучшить форматирование своего ответа? В режиме редактирования предоставляется справка по форматированию, взгляните на нее.

Ответ №6:

Вот вариант некоторых предыдущих ответов. Любой из приведенных ниже параметров можно добавить в профиль Powershell в соответствии с вашими потребностями.

Используйте псевдоним

Если вы просто хотите запустить что-то без сбоев $env:PATH .

 Set-Alias -Name docker -Value 'C:Program FilesDockerDockerresourcesbindocker.exe'
 

Используйте функцию

Или, если вам нужно больше сценариев.

 function docker {
# below is a basic example - go crazy here
amp; 'C:Program FilesDockerDockerresourcesbindocker.exe' @Args
}