如何通过powershell

时间:2015-09-25 10:14:59

标签: powershell msbuild hudson

我有一个Hudson服务器,里面有几个Jobs。一个作业创建一个包另一个部署包。创建和部署程序包基于MSBuild文件。此文件调用一些powershell脚本。在其中一个脚本中有一个有效的错误,如下所示。不幸的是,我的MSBuild脚本不会将其作为错误提取并继续执行其余的脚本,当然也完成失败。

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在任何给定错误的情况下使构建失败。

1 个答案:

答案 0 :(得分:2)

请尝试escape special character (Dollar Sign $),并且可能&#39; 在您的命令中签名:

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

可能这是你的错误。