gpt4 book ai didi

powershell - TFS 构建 PowerShell 步骤中的 Robocopy 报告失败但没有错误

转载 作者:行者123 更新时间:2023-12-04 01:49:05 28 4
gpt4 key购买 nike

我的 powershell 脚本运行时日志文件中没有报告错误,但 TFS 2015 构建步骤报告了错误。我需要执行特殊回电吗?

这是一种新样式的构建,而不是基于 XAML 的构建。

该脚本没有什么特别之处,它调用 robocopy,它成功地发生了。

这是脚本:

[CmdletBinding()]
param (
[string]$localWorkspace,
[string]$destination
)
begin{}
process
{
try
{
## Script
$ServiceDirs = Get-ChildItem $localWorkspace -Recurse | ?{ $_.PSIsContainer -eq $True -and $_.Name -match "^Service$" } | % { $_.FullName }

$serviceCollection = @{}
foreach ($Service in $ServiceDirs)
{
$ServiceName = Get-ChildItem $Service | ?{$_.Name -match ".*\.csproj$" } | % { $_.BaseName }

$binpath = ($service + "\bin\release")
$serviceCollection.Add($serviceName , $binpath)
}

$serviceCollection.GetEnumerator() | % {
Write-Verbose "Processing service: $($_.key)"

$currentDestination = ($destination + "\" + $_.key)
$output = robocopy $_.value $currentDestination /MIR /NFL /NDL /NJH /NJS /nc /ns /np
}
}
catch
{
write-host "Caught an exception:"
write-host "Exception Type: $($_.Exception.GetType().FullName)"
write-host "Exception Message: $($_.Exception.Message)"
}
}
end{}

如果我取消静音并使用/DEBUG 并且在 TFS 构建日志中没有任何捕获,我可以看到所有 robocopy 输出。

奇怪的是,当我强制出错时,catch 会执行并且该步骤报告成功。

报告的错误信息是:

Task PowerShell failed. This caused the job to fail. Look at the logs for the task for more details.

最佳答案

TL;博士 检查调用中使用的退出代码,或使用 exit离开
脚本。

RoboCopy使用一套退出代码,包括:

0×00 0 No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized.

0×01 1 One or more files were copied successfully (that is, new files have arrived).



( Full List Here )

因为脚本没有 exit声明 $LastExitCode 的值是 1 这对 Robocopy 有意义,但导致 TFS 相信脚本失败。

使用 exit抑制了 Robocopy 退出代码,因此 TFS 相信该脚本有效。然而,这意味着任何 Robocopy 信息都被压制了。

将最后一行更改为 exit ($LastExitCode -band 24)按照 this article 正确解决了问题.

关于powershell - TFS 构建 PowerShell 步骤中的 Robocopy 报告失败但没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340852/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com