OMG.PSUtilities.AzureDevOps/Public/Get-PSUADOBuildDetails.ps1

function Get-PSUADOBuildDetails {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [int]$BuildId,

        [Parameter(Mandatory)]
        [string]$Pat,

        [Parameter(Mandatory)]
        [string]$Organization,

        [Parameter(Mandatory)]
        [string]$Project
    )

    try {
        Write-Verbose "Escaping project name..."
        $escapedProject = [uri]::EscapeDataString($Project)

        Write-Verbose "Preparing authentication header..."
        $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$Pat"))
        $headers = @{ Authorization = "Basic $base64AuthInfo" }

        $buildUrl = "https://dev.azure.com/$Organization/$escapedProject/_apis/build/builds/$($BuildId)?api-version=7.1-preview.7"
        Write-Verbose "Calling Azure DevOps API at: $buildUrl"

        $buildDetails = Invoke-RestMethod -Uri $buildUrl -Headers $headers -Method Get -ErrorAction Stop

        return [PSCustomObject]@{
            BuildId      = $buildDetails.id
            PipelineName = $buildDetails.definition.name
            PipelineID = $buildDetails.definition.id
            QueuedTime   = $buildDetails.queueTime
            Status       = $buildDetails.status
            Result       = $buildDetails.result
            WebLink      = $buildDetails._links.web.href
        }
    }
    catch {
        Write-Error "Failed to retrieve build details for Build ID $BuildId. $_"
        $PSCmdlet.ThrowTerminatingError($_)
    }
}