Выполнение файла 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'

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

  1. клон $args
  2. вставь свои аргументы в новый массив
  3. & $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 открывается и ожидает ввода.

Другие вопросы по тегам