Подтвердить что ты не робот

Как я могу вызвать exec в psake для исполняемого файла с переменным путем?

Я не могу правильно назвать этот исполняемый файл в моем развертывании psake script.

Если я это сделаю:

exec { "$ArchiverOutputDir\NServiceBus.Host.exe /install" }

Он просто выводит это (и явно не вызывает исполняемый файл - просто выводит значение этого выражения):

c:\ReloDotNet2_ServiceEndpoints\Archiver\NServiceBus.Host.exe /install

Но если я это сделаю:

exec { c:\ReloDotNet2_ServiceEndpoints\Archiver\NServiceBus.Host.exe /install }

Я получаю ожидаемый результат от исполняемого файла.

Как правильно вызвать исполняемый файл с переменной в пути к исполняемому файлу в psake? Если это действительно проблема PowerShell, пожалуйста, не стесняйтесь исправить вопрос, чтобы отразить это понимание.

I

4b9b3361

Ответ 1

Классическая проблема PowerShell. Вместо этого попробуйте:

exec { & "$ArchiverOutputDir\NServiceBus.Host.exe" /install }

PowerShell выполняет не только команды, но и выражения, например:

C:\PS> 2 + 2
4
C:\PS> "hello world"
hello world

То, что вы дали PowerShell в начале конвейера, представляет собой строковое выражение, которое оно точно оценивает и печатает на консоли. Используя оператор вызова &, вы сообщаете PowerShell следующее: либо имя команды (в строке), либо исполняемый скриптблока. Технически вы также можете использовать . "some-command-name-or-path". Единственное различие заключается в том, что для команд PowerShell & создает новую область для выполнения команды, а . - нет. Для внешних exes не имеет значения, насколько я могу определить, какой из них вы используете, но & обычно используется.