我们有大量的构建经常发生在大量的源代码中。因此,我们希望在每次构建后清除构建源和暂存目录。我在本地 TFS 2015 Update 1 中使用 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
我没有使用 using ,而是使用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 | 删除-项目-递归-强制 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (E:\GeneralAgent1\_work\3\s\TfsBuild:String) [Get-ChildItem], Unauthor 化访问异常 + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
不-Recurse
Get-ChildItem -Path $directory -Force -Recurse | Remove-Item -Force
等于:
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
不-Force
Get-ChildItem -Path $directory -Force -Recurse | Remove-Item -Recurse
返回许多错误,1 表示权限被拒绝,而其他错误则由于之前的权限被拒绝而无法删除:
删除项目:无法删除项目 E:\GeneralAgent1\_work\3\s\Proxies\Development\Isd.Proxies.BO_16.01.1\Avalara\StyleCop.Cache: 您没有足够的访问权限来执行此操作。 在 E:\GeneralAgent1\_work\3\s\TfsBuild\Scripts\DeleteSources.ps1:11 char:54 + Get-ChildItem -Path $directory -Force -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
等于:
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
并获得类似的结果。
构建代理帐户对根目录具有完全权限。
请问有什么帮助吗?