DevOpsHandling/Get-DevOpsArtifactsFromLastSuccessfulBuild.ps1

function Get-DevOpsArtifactsFromLastSuccessfulBuild {
    Param(
        [Parameter(Mandatory=$true)]
        [string]$devOpsOrganization,
        [Parameter(Mandatory=$true)]
        [string]$devOpsProjectName,
        [Parameter(Mandatory=$true)]
        [string]$repositoryName,
        [Parameter(Mandatory=$true)]
        [string]$devOpsToken,
        [Parameter(Mandatory=$true)]
        [string]$destination
    )

    $devOpsProjectName = (Get-DevOpsProjects -devOpsOrganization $devOpsOrganization -devOpsToken $devOpsToken | Where-Object name -like ('*{0}*' -f $devOpsProjectName)).name

    $lastBuildId = (Get-LastSuccessfulBuildId -devOpsOrganization $devOpsOrganization -devOpsProjectName $devOpsProjectName -repositoryName $repositoryName -devOpsToken $devOpsToken)
    if ($null -eq $lastBuildId -or $lastBuildId -eq '') {
        throw "No build found for artifact"
    }

    $artifact = (Invoke-AzureDevOpsApi -url ('https://dev.azure.com/{0}/{1}/_apis/build/builds/{2}/artifacts' -f $devOpsOrganization, $devOpsProjectName, $lastBuildId) -devOpsToken $devOpsToken)
    if ($null -ne $artifact) {
        if ($null -ne $artifact.value) {
            if ($null -ne $artifact.value.resource) {
                $artifact = $artifact.value.resource
            }
        }
    }

    $appsList = [System.Collections.ArrayList]@()

    $artifact | ForEach-Object {
        $apps = (Invoke-AzureDevOpsApi -url $_.downloadUrl -destination $destination -outfile (Join-Path $destination "artifact.zip") -devOpsToken $devOpsToken)
        foreach ($app in $apps) {
            [void]$appsList.Add($app)
        }
    }

    Remove-Item -Path (Join-Path $destination "artifact.zip") -Force | Out-Null

    return $appsList
}