如何在psake中调用exec到具有可变路径的可执行文件?

时间:2012-12-19 23:01:47

标签: powershell 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问题,请随时更正问题以反映这一见解。

1 个答案:

答案 0 :(得分:16)

经典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,就我可以判断你使用哪一个而言没有区别,但通常使用&