.GUID 1db3a669-88dc-44fd-a9cb-8d029702be66
 Windows 11
 Windows Upgrade
 1.1 - Updated URI's for project

 Downloads the Windows 11 ISO from the any URL hosting it, mounts it to the Windows Operating system, and then attempts to install it will fail if it doesn't meet the strict Windows 11 requirements.
.PARAMETER arguments
 These are the arguments to give to the Windows 11 setup.exe after it is mounted.
 These switches can be found here -
 Default: /auto upgrade /DynamicUpdate Disable /quiet
.PARAMETER DownloadPath
 The path where the Windows 11 ISO will be downloaded.
 Default: C:\windows\temp\win11.iso
 The URL for the Windows 11 ISO you can grab a download link here that lasts for 24 hours
 Install-Windows11 -DownloadURL ""
 Install-Windows11 -arguments "/auto upgrade /DynamicUpdate Disable" -DownloadURL ""
 Install-Windows11 -DownloadPath "C:\temp\win11.iso" `
    -DownloadURL "
        [Parameter(Mandatory=$true, HelpMessage="Specify the URL for Windows 11 ISO")]
        [Parameter(Mandatory=$false, HelpMessage="Specify path for the Windows 11 ISO to be downloaded")]
        [ValidateScript({Test-Path $_ -IsValid})]
        [string]$DownloadPath = "C:\windows\temp\win11.iso",
        [Parameter(Mandatory=$false, HelpMessage="Specify Arguments to run with setup.exe")]
        [string]$Arguments = "/auto upgrade /DynamicUpdate Disable /quiet"
Write-Host "Downloading ISO from $DownloadURL to $DownloadPath"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($DownloadURL, $DownloadPath)

Write-Host "Mounting ISO File"
$vol = Mount-DiskImage -ImagePath $DownloadPath  -PassThru |
    Get-DiskImage | 
$setup = '{0}:\setup.exe' -f $vol.DriveLetter

Write-Host "Starting Windows 11 Upgrade"
Start-Process cmd.exe -Wait -ArgumentList "/c $setup $Arguments"

Write-Host "Finished installing - if errors run without the /quiet command"