我似乎无法在我的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问题,请随时更正问题以反映这一见解。
我
答案 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,就我可以判断你使用哪一个而言没有区别,但通常使用&
。