在TFS生成结束时运行时删除项错误



我们有大量的构建,通常使用大量的源代码。因此,我们希望在每次构建后清除构建源和暂存目录。我在TFS 2015 Update 1 on prem中使用vNext构建。我已经创建了一个PowerShell脚本作为执行删除的最终任务:

[CmdletBinding()]
param()
begin {
    function Delete-Directory {
        param([string]$directory)
        Write-Output "Attempting to delete '$($directory)'"
        if (Test-Path $directory -pathType container) {
            Get-ChildItem -Path $directory -Force -Recurse | Remove-Item -Recurse -Force
            Write-Output "Successfully deleted the directory: '$($directory)'"
        } else {
            Write-Output "Failed to delete '$($directory)' as it does not exist"
        }
    }
}
process {
    Delete-Directory $env:BUILD_SOURCESDIRECTORY
    Delete-Directory $env:BUILD_STAGINGDIRECTORY
}
end{}

最初,我使用的不是Get-ChildItem .... | Remove-Item,而是Remove-Item *path* -Recurse -Force,但显然Remove-Item的递归参数有问题。起初它有时是有效的。现在它永远不起作用。

我尝试了许多不同的变体,以下是一些结果:

使用-Recurse-Force

Get-ChildItem -Path $directory -Force -Recurse | Remove-Item -Recurse -Force

等于:

Get-ChildItem:访问路径"E:\GeneralAgent1\_work\3\s\TfsBuild"是否认。在E:\GeneralAgent1\_work\3\s\TfsBuild\Scripts\DeleteSources.ps1:11 char:5+Get-ChildItem-Path$directory-Force-Recurse|删除项-Recurse-Force+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo:PermissionDenied:(E:\GeneralAgent1\_work\3\s\TfsBuild:String)[Get-ChildItem],UnauthorizedAccessException+FullyQualifiedErrorId:DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

-Recurse

Get-ChildItem -Path $directory -Force -Recurse | Remove-Item -Force

等于:

删除项目:Windows PowerShell处于非交互式模式。读取并提示功能不可用。在E:\GeneralAgent1\_work\3\s\TfsBuild\Scripts\DeleteSources.ps1:11 char:54+Get-ChildItem-Path$directory-Force-Recurse | Remove Item-Force+~~~~~~~~~~~~~~~~~~+CategoryInfo:InvalidOperation:(:)[Remove Item],PSInvalidOperationException+FullyQualifiedErrorId:InvalidOperation,Microsoft.PowerShell.Commands.RemoveItemCommand

-Force

Get-ChildItem -Path $directory -Force -Recurse | Remove-Item -Recurse

返回许多错误,1个被拒绝权限,另一些由于之前被拒绝权限而无法删除:

删除项目:无法删除项目E: \GeneralAgent1\_work\3\s\Proxies\Development\Isd.Proxies.BO_1601.1\Avalara\StyleComp.Cache:您没有足够的访问权限来执行此操作。在E:\GeneralAgent1\_work\3\s\TfsBuild\Scripts\DeleteSources.ps1:11 char:54+Get-ChildItem-Path$directory-Force-Recurse | Remove Item-Recurse+~~~~~~~~~~~~~~~~~~~~+CategoryInfo:PermissionDenied:(StyleCop.Cache:FileInfo)[Remove Item],IOException+FullyQualifiedErrorId:RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand。。。。。。批次

-Recurse-Force

Get-ChildItem -Path $directory -Force -Recurse | Remove-Item

等于:

删除项目:Windows PowerShell处于非交互式模式。读取并提示功能不可用。在E:\GeneralAgent1\_work\3\s\TfsBuild\Scripts\DeleteSources.ps1:11 char:54+Get-ChildItem-Path$directory-Force-Recurse|删除项目+~~~~~~~~~~~+CategoryInfo:InvalidOperation:(:)[Remove Item],PSInvalidOperationException+FullyQualifiedErrorId:InvalidOperation,Microsoft.PowerShell.Commands.RemoveItemCommand

我也尝试过其他组合,并使用Get-ChildItem的参数进行了游戏,得到了类似的结果。

生成代理帐户对根目录具有完全权限。

请帮忙吗?

如果从下到上,您应该能够删除所有内容。在删除项目之前,按全名降序对Get-ChildItem的结果进行排序:

Get-ChildItem -Path $directory -Force -Recurse |
  Sort-Object -Property FullName -Descending |
  Remove-Item -Recurse -Force

不确定这是你的修复,但我做的只是有点不同

Get-ChildItem $FolderPath | ForEach-Object ($_){
    Remove-Item $_.FullName -Recurse -Force
}

相关内容

  • 没有找到相关文章

最新更新