Загрузите сценарий SQL с помощью PowerShell из рабочих ЭЛЕМЕНТОВ TFS(ЗАДАЧА/ОШИБКА)

#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
    }
}