svn - 如何检查从 Powershell 调用 SVN 的结果

标签 svn powershell

我正在尝试使用 Powershell 脚本自动执行分支操作,如下所示:

$fromUrl = 'svn://some/from/url'
$toUrl = 'svn://some/to/url.'

[Array]$arguments = "copy", "-q", $fromUrl, $toUrl, "-m", "New branch"

echo "Branching from: " $fromUrl
echo "Branching to: " $toUrl

$copyResult = & svn $arguments 
echo "Result: " $copyResult

echo "Switching to: " $toUrl
$switchResult = svn switch -q $toUrl ho-til-test
echo "Result: "  $switchResult

只要对 SVN 的调用有效,这应该可以正常工作;然而,我想要的是捕获结果,并在调用失败时停止脚本并显示错误消息。上面的脚本显然因为 URL 无效而失败,但结果没有在 $copyResult 中捕获和 $switchResult ,正如我所料。结果输出如下;状态消息显示在我的两个结果变量的输出之前,它们是空的:
PS > .\PsExampleForSO.ps1
Branching from:
svn://some/from/url
Branching to:
svn://some/to/url.
svn: E731001: Unable to connect to a repository at URL 'svn://some/from/url'
svn: E731001: Unknown hostname 'some'
Result:
Switching to:
svn://some/to/url.
svn: E731001: Unable to connect to a repository at URL 'svn://some/to/url.'
svn: E731001: Unknown hostname 'some'
Result:
PS >

这与我正在进行的其他一些调用不同,在这些调用中,可以在变量中捕获输出结果并稍后检查。

对于这两个调用,有什么方法可以实现这一点吗?

最佳答案

外部命令的退出代码存储在 $LastExitCode 中环境变量。如果您希望脚本在出现错误时停止,您应该检查该变量:

$copyResult = & svn $arguments
if ($LastExitCode -ne 0) {
  exit
}

不过,我建议在日志文件而不是变量中捕获常规和错误输出:
& svn $arguments >'C:\path\to\output.log' 2>'C:\path\to\error.log'
if ($LastExitCode -ne 0) {
  exit
}

关于svn - 如何检查从 Powershell 调用 SVN 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625452/

相关文章:

performance - (Tortoise)SVN 中慢差异的解决方案?

python子进程作为Windows中的不同用户

SVN: "tree conflict already exists",但在我尝试合并之前没有

svn - 服务器端文件夹重命名(移动)是否会在 Subversion 中创建损坏的工作副本?

unit-testing - 佩斯特可以 mock 一个异常(exception)吗?

variables - 永久 PowerShell 变量

c# - "Cannot Invoke this function because the current host does not implement it"

svn - 在提交之前跟踪和执行同行评审的最佳方法

powershell - 如何获取 Write-Progress 产生的进度信息?

powershell - If 和 ElseIf 语句在 PowerShell 中不起作用?