Public/Get-UUPDumpMedia.ps1

<#
.SYNOPSIS
Download the latest Windows build from https://uupdump.net/
 
.DESCRIPTION
Get-UUPDumpMedia is a PowerShell function that allows users to download the latest build of desired Windows version. The function accepts parameters such as desired OS, desired edition(s), desired language, destination of ISO, and whether to download ESD instead of WIM.
 
.PARAMETER OS
Desired OS (server, 10, 11, canary, dev)
 
.PARAMETER Editions
Desired editions (core, professional, enterprise, serverstandard, serverstandardcore, serverdatacenter, serverdatacentercore)
 
.PARAMETER Lang
Desired Lang (en-us, fr-fr ...)
 
.PARAMETER Destination
Destination of the ISO (Default to user downloads directory)
 
.PARAMETER ESD
ESD instead of WIM
 
.EXAMPLE
Get-UUPDumpMedia -OS "10" -Editions "core","professional" -Lang "en-us"
Get-UUPDumpMedia -OS "11" -Editions "core", "professional", "enterprise" -Lang "en-us"
Get-UUPDumpMedia -OS "11" -Editions "enterprise" -Lang "en-us"
Get-UUPDumpMedia -OS "server" -Editions serverstandard -Lang "en-us"
Get-UUPDumpMedia -OS "canary" -Editions "professional" -Lang "en-us"
 
.NOTES
- OS, Editions, and Lang parameters are mandatory and must be specified.
- ESD is an optional parameter and is off by default.
- Destination is an optional parameter and is set to the user's downloads directory by default.
 
.LINK
https://github.com/innovatodev/UUPDumpDownloader
#>

function Get-UUPDumpMedia {
    [CmdletBinding()]
    param (
        # Desired OS (server, 10, 11)
        [Parameter(Mandatory = $true, Position = 0)]
        [ValidateSet('server', '10', '11', 'canary', 'dev')]
        [String]
        $OS,
        # Desired editions (core, professional, enterprise, serverstandard, serverstandardcore, serverdatacenter, serverdatacentercore)
        [Parameter(Mandatory = $true, Position = 1)]
        [ValidateSet('core', 'professional', 'enterprise', 'serverstandard', 'serverstandardcore', 'serverdatacenter', 'serverdatacentercore')]
        [String[]]
        $Editions,
        # Desired Lang (en-us, fr-fr ...)
        [Parameter(Mandatory = $true, Position = 2)]
        [String]
        $Lang,
        # Destination of the ISO (Default to user downloads directory)
        [Parameter(Position = 3)]
        [System.IO.DirectoryInfo]
        $Destination = "$env:USERPROFILE\Downloads",
        # ESD instead of wim
        [Switch]$ESD
    )

    $ConvertConfig = '[convert-UUP]
AutoStart =1
AddUpdates =1
Cleanup =1
ResetBase =0
NetFx3 =1
StartVirtual =0
wim2esd =0
wim2swm =0
SkipISO =0
SkipWinRE =0
LCUwinre =1
UpdtBootFiles=1
ForceDism =0
RefESD =0
SkipEdge =0
AutoExit =1
 
[Store_Apps]
SkipApps =0
AppsLevel =0
CustomList =0
 
[create_virtual_editions]
vAutoStart =1
vDeleteSource=0
vPreserve =0
vwim2esd =0
vwim2swm =0
vSkipISO =0
vAutoEditions=
'


    Write-Host "Downloading UUPDump for Edition : $Editions" -ForegroundColor DarkMagenta

    # Cleaning
    If (Test-Path "$env:TMP\uupdump.zip") { Remove-Item "$env:TMP\uupdump.zip" -Force -Confirm:$false | Out-Null }
    If (Test-Path "$env:TMP\uupdump") { Remove-Item "$env:TMP\uupdump" -Recurse -Force -Confirm:$false | Out-Null }

    # Editions check
    if ($OS -eq 'server') { if ($Editions -in ('core', 'professional', 'enterprise') ) { Write-Error "Wrong editions for $OS" } }
    else { if ($Editions -in ('serverstandard', 'serverstandardcore', 'serverdatacenter', 'serverdatacentercore') ) { Write-Error "Wrong editions for $OS" } }

    if ('enterprise' -notin ($Editions)) {
        # Not contain enterprise edition
        $EditionsJoinURL = ""
        foreach ($Edition in $Editions) { $EditionsJoinURL += "$Edition;" }
        $EditionsJoinURL = $EditionsJoinURL.TrimEnd(";")
        $Latest = Get-UUPDumpLatest -OS $OS

        # GET Request
        $null = Invoke-WebRequest -UseBasicParsing -Uri "https://uupdump.net/download.php?id=$($Latest.ID)&pack=$Lang&edition=$EditionsJoinURL" -SessionVariable session

        # POST Request with specific parameters
        $null = Invoke-WebRequest -UseBasicParsing -Uri "https://uupdump.net/get.php?id=$($Latest.ID)&pack=$Lang&edition=$EditionsJoinURL" `
            -Method "POST" `
            -SessionVariable session `
            -Body "autodl=2" `
            -OutFile "$env:TMP\uupdump.zip"

        # Extract ZIP
        Expand-Archive "$env:TMP\uupdump.zip" "$env:TMP\uupdump"
        Remove-Item "$env:TMP\uupdump.zip" -Force -Confirm:$false -ErrorAction SilentlyContinue | Out-Null

        # ConvertConfig.ini
        if ($ESD) {
            $ConvertConfig = $ConvertConfig -replace 'wim2esd =0', 'wim2esd =1'
            $ConvertConfig
        }
        Set-Content -Encoding ascii -Path "$env:TMP\uupdump\ConvertConfig.ini" -Value $ConvertConfig -Force
    } else {
        # ENTERPRISE
        $EditionsJoinURL = ""
        foreach ($Edition in $Editions) { if ($Edition -ne 'enterprise') { $EditionsJoinURL += "$Edition;" } }
        $EditionsJoinURL = $EditionsJoinURL.TrimEnd(";")
        if ('core' -notin ($Editions) -and 'professional' -notin ($Editions)) { $EditionsJoinURL = 'professional' ; $Mono = $true } else { $Mono = $false }
        $Latest = Get-UUPDumpLatest -OS $OS
        # GET Request
        $null = Invoke-WebRequest -UseBasicParsing -Uri "https://uupdump.net/download.php?id=$($Latest.ID)&pack=$Lang&edition=$EditionsJoinURL" -SessionVariable session

        # POST Request with specific parameters
        $null = Invoke-WebRequest -UseBasicParsing -Uri "https://uupdump.net/get.php?id=$($Latest.ID)&pack=$Lang&edition=$EditionsJoinURL" `
            -Method "POST" `
            -SessionVariable session `
            -Body "autodl=3&virtualEditions%5B%5D=Enterprise" `
            -OutFile "$env:TMP\uupdump.zip"

        # Extract ZIP
        Expand-Archive "$env:TMP\uupdump.zip" "$env:TMP\uupdump"
        Remove-Item "$env:TMP\uupdump.zip" -Force -Confirm:$false -ErrorAction SilentlyContinue | Out-Null

        # ConvertConfig.ini
        $ConvertConfig = $ConvertConfig -replace 'StartVirtual =0', 'StartVirtual =1'
        if ($ESD) {
            $ConvertConfig = $ConvertConfig -replace 'wim2esd =0', 'wim2esd =1'
            $ConvertConfig = $ConvertConfig -replace 'vwim2esd =0', 'vwim2esd =1'
        }
        if ($Mono) {
            # Only enterprise
            $ConvertConfig = $ConvertConfig -replace 'vDeleteSource=0', 'vDeleteSource=1'
        } else {
            # enterprise + others editions
            $ConvertConfig = $ConvertConfig -replace 'vPreserve =0', 'vPreserve =1'
        }
        $ConvertConfig = $ConvertConfig -replace 'vAutoEditions=', 'vAutoEditions=Enterprise'
        Set-Content -Encoding ascii -Path "$env:TMP\uupdump\ConvertConfig.ini" -Value $ConvertConfig -Force
    }

    # Launching uup_download_windows.cmd
    Write-Host "Launching uup_download_windows.cmd" -ForegroundColor DarkMagenta
    Write-Host "Waiting..." -ForegroundColor Cyan
    $null = Start-Process "cmd" `
        -ArgumentList "/c $env:TMP\uupdump\uup_download_windows.cmd" `
        -WorkingDirectory "$env:TMP\uupdump\" `
        -UseNewEnvironment `
        -Wait

    # ISO
    $EditionsJoinName = ""
    foreach ($Edition in $Editions) { $EditionsJoinName += "$Edition-" }
    $EditionsJoinName = $EditionsJoinName.TrimEnd("-").Replace('server', '')
    $OS = $OS.Replace("server", 'Server')
    if ($OS -eq 'canary') { $ISOName = "Windows11_Canary_$($Latest.Number)_$($Lang)_$EditionsJoinName.iso" }
    if ($OS -eq 'dev') { $ISOName = "Windows11_Dev_$($Latest.Number)_$($Lang)_$EditionsJoinName.iso" }
    else { $ISOName = "Windows$($OS)_$($Latest.Number)_$($Lang)_$EditionsJoinName.iso" }
    Write-Host "Checking for $ISOName" -ForegroundColor Cyan
    $ISO = Get-ChildItem "$env:TMP\uupdump" -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.Extension -eq ".iso" } | Select-Object -First 1
    if (!$ISO) {
        Write-Host "An error occured, ISO cannot be found" -ForegroundColor Red
        Write-Host "Cleaning ..." -ForegroundColor Cyan
        Remove-Item "$env:TMP\uupdump" -Force -Recurse -Confirm:$false | Out-Null
        Exit 1
    } else {
        Move-Item -Path $ISO.FullName -Destination "$Destination\$ISOName" -Force -Confirm:$false
        Write-Host "Cleaning ..." -ForegroundColor Cyan
        Remove-Item "$env:TMP\uupdump" -Force -Recurse -Confirm:$false | Out-Null
    }
}