Public/Get-UUPDumpLatest.ps1

<#
.SYNOPSIS
Get the latest Windows builds information from https://uupdump.net/
 
.DESCRIPTION
The Get-UUPDumpLatest function retrieves the latest Windows retail build information from https://uupdump.net/ and returns it as a hashtable.
 
.PARAMETER OS
Desired OS (server, 10, 11, canary, dev)
 
.EXAMPLE
Get-UUPDumpLatest -OS 11
 
Retrieves the latest Windows 11 retail build information from https://uupdump.net/
 
.OUTPUTS
A hashtable containing the Build ID and Build Number.
 
.NOTES
The function uses Invoke-WebRequest to retrieve the information from UUPDump.net.
 
.LINK
https://github.com/innovatodev/UUPDumpDownloader
#>

function Get-UUPDumpLatest {
    [CmdletBinding()]
    param (
        # Desired OS (server, 10, 11, canary, dev)
        [Parameter(Mandatory = $true, Position = 0)]
        [ValidateSet('server', '10', '11', 'canary', 'dev')]
        [String]
        $OS
    )
    switch ($OS) {
        'server' { $Search = 'Feature update to Microsoft server operating system, version' }
        '10' { $Search = 'Windows 10, version' }
        '11' { $Search = 'Windows 11, version' }
        'canary' {
            $response = Invoke-WebRequest -UseBasicParsing -Uri "https://uupdump.net" | Select-Object Links
            $selected = $response.Links | Where-Object { $_.outerHTML -like "*known.php?q=*" } | Select-Object -Index 0
            $replaced = $selected.href.replace("known.php?q=", "")
            $Search = $replaced
        }
        'dev' {
            $response = Invoke-WebRequest -UseBasicParsing -Uri "https://uupdump.net" | Select-Object Links
            $selected = $response.Links | Where-Object { $_.outerHTML -like "*known.php?q=*" } | Select-Object -Index 1
            $replaced = $selected.href.replace("known.php?q=", "")
            $Search = $replaced
        }
    }

    Write-Host "Searching UUPDump for Windows $OS" -ForegroundColor DarkMagenta
    $encoded = [System.Web.HttpUtility]::UrlEncode($Search)
    $response = Invoke-WebRequest -UseBasicParsing -Uri "https://uupdump.net/known.php?q=$encoded" | Select-Object Links

    # Filter first AMD64 (x64) link
    $selected = $response.Links | Where-Object { $_.outerHTML -like "*AMD64*" } | Select-Object -First 1

    # Build ID
    $BuildID = $null
    $BuildID = $selected.href.Replace("./selectlang.php?id=", "")
    if ($null -eq $BuildID ) { Write-Error "An error occurred, Build ID was not found." }
    if ($OS -in ("server", "10", "11") ) {
        # Build Number
        $BuildNumber = $null
        $r = [regex] "\(([^\[]*)\)"
        $match = $r.match($selected.outerHTML)
        $BuildNumber = $match.groups[1].value
        if ($null -eq $BuildNumber ) { Write-Error "An error occurred, Build Number was not found." }
    } else {
        # Build Number
        $BuildNumber = $null
        $BuildNumber = ($selected.outerHTML | Select-String -AllMatches "(?<=Preview\s)(.+?)(?=\s\()").Matches.Value
        if ($null -eq $BuildNumber ) { Write-Error "An error occurred, Build Number was not found." }
    }
    [hashtable]$hash = @{
        ID     = $BuildID
        Number = $BuildNumber
    }
    Write-Host "ID = $BuildID" -ForegroundColor Green
    Write-Host "Number = $BuildNumber" -ForegroundColor Green
    Start-Sleep 1
    return $hash
}