function Invoke-Upgrade([Context] $context) { Write-Host "Upgrading Windows"; Write-Host "Preparing for Windows Update"; $null = Import-Module PSWindowsUpdate; Write-Host "Performing Windows Update"; $null = Install-WindowsUpdate -AcceptAll -IgnoreReboot; if ((Get-WURebootStatus -Silent)) { Write-Information "A Reboot is Required!"; Write-Information "Windows will reboot now and the installation will be continued automatically."; $null = New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name "PortValhalla" -Value "pwsh `"$($context.EntryPoint)`"" -PropertyType ExpandString; $context.Reboot(); exit; } elseif ((Get-WindowsUpdate -IgnoreReboot).Count -gt 0) { Write-Information "More updates are available. Restarting upgrade routine."; $null = Invoke-Upgrade $context; return; } else { Write-Information "Upgrading Windows finished successfully!"; return; } }