2015-09-25 72 views
1

我有一个Hudson服务器与几个工作。一份工作创建了另一份部署包的软件包。创建和部署软件包基于MSBuild文件。该文件调用一些PowerShell脚本。在其中一个脚本中有一个有效的错误,如下所示。不幸的是,我的MSBuild脚本不会将其作为错误提取出来,并继续执行脚本的其余部分,当然这也完成失败。如何通过powershell失败构建

C:\Hudson\TRUNK\buildfiles\deploy\PowershellScripts\ExtractPackages.ps1 : Cannot bind argument to parameter 'Packages' 
    because it is an empty string.At line:1 char:249 
    + ... nt\ONT\Package '' 
    C:\Hudson\TRUNK\buildfiles ... 
    +     ~~ 
     + CategoryInfo   : InvalidData: (:) [ExtractPackages.ps1], ParameterBindingValidationException 
     + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,ExtractPackages.ps1 

我的MSBuild目标的样子:

<Target Name="UnpackProducts"> 
    <Exec Command="$(PowerShellExe) -command &quot;&amp;{ $(PowershellScriptsFolder)\ExtractPackages.ps1 '@(Packages)' ; exit $lastexitcode }&quot;" />  
</Target> 

我一直以为; exit $lastexitcode解决了这个问题。但它没有,或者我做错了什么?

现在我已经在调用实际的powershell命令之前添加了<Error Condition="@(Packages) == ''" Text="Packages are missing!"/>来检查这个特定的情况。但我想知道如何通过任何给定的错误通过PowerShell的构建失败。

回答

2

请尽量escape special character (Dollar Sign $),和可能,登录您的命令:

<Target Name="UnpackProducts"> 
    <Exec Command="$(PowerShellExe) -command &quot;&amp;{ $(PowershellScriptsFolder)\ExtractPackages.ps1 %[email protected](Packages)%27 ; exit %24lastexitcode }&quot;" /> 
</Target> 

也许这是你的错。

+1

我已将其更改为''这似乎是伎俩。早些时候,我就像我在原来的问题中描述的那样。就是因为我用一些遗留脚本作为例子(PowerShell对我来说是一种新的)。 – Willem