<#
    .SYNOPSIS
    Updates the running Windows machine.
#>
function Update-WindowsInstallation {
    <#
        Runs the Windows update loop.
    #>
    function Start-UpdateLoop {
        $null = Import-Module PSWindowsUpdate;
        $hasUpdates = $false;
        Write-Host "Searching for updates…";

        while (((Get-WindowsUpdate -IgnoreReboot).Count -gt 0)) {
            Write-Host "There are updates available.";
            Write-Host "Installing updates";
            $hasUpdates = $true;

            try {
                $null = Install-WindowsUpdate -AcceptAll -IgnoreReboot -ErrorAction "SilentlyContinue";
            }
            catch { }

            if ((Get-WURebootStatus -Silent)) {
                Write-Information "A Reboot is Required!";
                Write-Information "Windows will reboot now and the installation will be continued automatically.";
                return;
            } else {
                Write-Information "Updating Windows finished successfully!";
                return;
            }
        }

        if (-not $hasUpdates) {
            Write-Host "There are no updates available.";
        }
    }

    Start-UpdateLoop;
}