我们有大量的构建,通常使用大量的源代码。因此,我们希望在每次构建后清除构建源和暂存目录。我在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
}