使用命令调用PowerShell时如何完全抑制错误?

时间:2014-06-02 19:43:49

标签: powershell msbuild

我正在尝试编写将复制文件的msbuild postbuild事件。它不必是100% - 目标文件可能被使用或锁定,在这种情况下我希望构建成功。

所以我有类似*

的东西
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "cp foo `$(TargetDir)"

当另一个进程使用$(TargetDir)\foo时,我收到错误,我的构建失败。所以我试试

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "cp foo `$(TargetDir) -ErrorAction SilentlyContinue"

但是错误被打印出来并且失败了。所以我试试

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "try { cp foo `$(TargetDir) } catch {}"

现在错误没有打印但它仍然失败,因为如果我执行上面的$LastExitCode仍然等于1。

我可以在try catch和powershell中再次包装但是如何正确地抑制错误?


*实际命令如下 - 不重要

PowerShell -NoProfile -ExecutionPolicy Bypass -Command `"try { ls '`$(SolutionDir)\packages\GhostScriptSharp.*\Tools\gsdll32.dll' | Sort -Descending | Select -First 1 | cp -Destination '`$(TargetDir)' } catch {}`""

1 个答案:

答案 0 :(得分:2)

您可以使用exit关键字明确设置脚本的退出代码:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "cp foo `$(TargetDir) -ErrorAction SilentlyContinue; exit 0"