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

Кажется, я не могу правильно назвать этот исполняемый файл в моем сценарии развертывания psake.

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

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


person Josh Kodroff    schedule 19.12.2012    source источник


Ответы (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 & создает новую область для выполнения команды, а . — нет. Для внешних исполняемых файлов не имеет значения, насколько я могу судить, какой из них вы используете, но обычно используется &.

person Keith Hill    schedule 19.12.2012