#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:
- клонировать $args
- поместите ваши аргументы в новый массив
- 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
}