#powershell #command-line #tfs
Вопрос:
Я пытался загрузить некоторые файлы .sql в папку с помощью PowerShell из рабочих элементов TFS(ОШИБКА/ЗАДАЧА). Каким-то образом файлы прикреплены, как показано ниже, и я не могу загрузить
F:Folder1Folder2ABCDSeries211004_153116306.001.sql
Я могу загрузить, если файлы прикреплены, как показано ниже
211004_153116306.001.sql
Есть ли хороший фрагмент кода для загрузки всех файлов в папку, как бы они ни были прикреплены?
Функция, используемая для получения вложений
function GetAllTheAttachments {
param (
[string]$TFSID
)
try {
Write-Host "Now fetching all scripts for TFSID:", $TFSID
# get all the attachment URLS and names from TFS
$TFSBaseURL = "$($TfsServerUrl)/_apis/wit/workitems?ids=" $TFSID 'amp;$expand=allamp;api-version=3.2'
$TFSBaseURLContents = Invoke-RestMethod -Uri $TFSBaseURL -Credential $credential
$attachmentURL = $TFSBaseURLContents.value.relations | Where-Object { $_.rel -eq "AttachedFile" } | Select-Object -Property url
$attachmentName = $TFSBaseURLContents.value.relations | Where-Object { $_.rel -eq "AttachedFile" } | Select-Object -Property attributes
# getting sql script count
$totalAttachmentCount = $attachmentURL.count
# for single script tfs items, adding this hard coded rule
if (!$totalAttachmentCount) { $totalAttachmentCount = 1 }
$loopCount = $totalAttachmentCount - 1
# Count of total scripts in a TFS
Write-Host $TFSID, "has number of attachments:", $totalAttachmentCount
if ($totalAttachmentCount -ge 1) {
foreach ($eachFile in 0..$loopCount) {
if ($attachmentName[$eachFile].attributes.name.ToLower().Contains(".sql")) {
Write-Host "Now fetching fetching script:", $attachmentName[$eachFile].attributes.name -ForegroundColor DarkGreen -BackgroundColor White
$downloadPath = $outputFolder $attachmentName[$eachFile].attributes.name
$fileDownloadURL = $attachmentURL[$eachFile].url.ToString() '?fileName=' $attachmentName[$eachFile].attributes.name 'amp;download=trueamp;api-version=3.2'
Write-Host $fileDownloadURL
Invoke-WebRequest -Uri $fileDownloadURL -OutFile $downloadPath -Credential $credential
# add 1 to $scriptsDownloadedCount
$Script:scriptsDownloadedCount
#$scriptsDownloadedCount=$scriptsDownloadedCount 1
}
else {
Write-Host "File will be skipped:", $attachmentName[$eachFile].attributes.name -ForegroundColor red -BackgroundColor white
}
}
}
Write-Host "All scripts completed for TFSID:", $TFSID
}
catch {
Write-Host $_.Exception.Message
Write-Host $_.Exception.ItemName
}
}