Выполнение файла EXE с использованием скрипта PowerShell
Я пытаюсь выполнить 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 " не распознается как имя командлета, функция, файл сценария или работоспособная программа. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.
(Я вызвал команду, используя оператор "&".)
Как я могу исправить эту проблему?
6 ответов
& "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"
Похоже, что вы указываете 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>
То есть &
ожидается, что за ним последует строка, идентифицирующая команду: командлет, функция, родной exe, относительный или абсолютный путь.
Как только вы получите только это работает:
& "c:\some path with spaces\foo.exe"
Начните работать над цитированием аргументов по мере необходимости. Хотя, похоже, ваши аргументы должны быть в порядке (без пробелов и других специальных символов, интерпретируемых PowerShell).
В Powershell перейдите в расположение файла.exe. Например:
cd C: \ Users \ Администраторы \ Загрузки
PS C:\Users\ Администраторы \ Загрузки> & '.\ Aaa.exe'
Появится установщик и следуйте инструкциям на экране.
- клон $args
- вставь свои аргументы в новый массив
- & $path $args
Демо-версия:
$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()
$myArgs += '-p'
$myArgs += $env:NGINX_HOME
& $exepath $myArgs
Вот вариант некоторых из предыдущих ответов. Любой из приведенных ниже вариантов можно добавить в профиль Powershell в соответствии с вашими потребностями.
Используйте псевдоним
Если вы просто хотите запустить что-то, не испортив
$env:PATH
.
Set-Alias -Name docker -Value 'C:\Program Files\Docker\Docker\resources\bin\docker.exe'
Используйте функцию
Или, если вам нужно больше сценариев.
function docker {
# below is a basic example - go crazy here
& 'C:\Program Files\Docker\Docker\resources\bin\docker.exe' @Args
}
Не будучи разработчиком, я нашел решение в запуске нескольких команд ps в одной строке. Например:
powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc
Помещая " (двойные кавычки) перед & (амперсандом), он выполняет исполняемый файл. Ни в одном из примеров, которые я обнаружил, это не упоминалось. Без двойных кавычек приглашение ps открывается и ожидает ввода.