No description
  • PowerShell 100%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-06 22:15:41 +02:00
Changelog.md Update Changelog.md 2026-08-06 22:15:41 +02:00
FullSystemUpdate.ps1 Update FullSystemUpdate.ps1 2026-08-06 22:15:22 +02:00
Readme.md Add Readme.md 2026-08-06 21:35:09 +02:00

FullSystemUpdate

Volledig onbeheerde systeemupdate voor Windows client, Windows Server en legacy systemen. Werkt Windows, winget-pakketten, Microsoft Store-apps en Microsoft 365 Apps bij zonder gebruikersinteractie, en biedt daarna een herstartmelding met automatische fallback.

Het script detecteert eerst zelf het OS-profiel en schakelt bronnen die niet ondersteund worden netjes uit — dezelfde FullSystemUpdate.ps1 draait dus op Windows 11, Server 2025, Server Core én Server 2012 R2.

Ondersteuningsmatrix

Platform Build Windows Update Winget Store Office C2R Herstartmelding
Windows 11 22000+ PSWindowsUpdate ingebouwd GUI-dialoog
Windows 10 1809+ 17763+ PSWindowsUpdate ingebouwd GUI-dialoog
Windows 8.1 / 7 SP1 9600 / 7601 COM-fallback GUI-dialoog
Server 2025 26100+ PSWindowsUpdate voorgeïnstalleerd GUI / Core-fallback
Server 2022 20348 PSWindowsUpdate ⚠️ via -InstallWingetIfMissing GUI / Core-fallback
Server 2019 / 2016 17763 / 14393 PSWindowsUpdate GUI / Core-fallback
Server 2012 R2 / 2008 R2 9600 / 7601 COM-fallback GUI / Core-fallback

⚠️ Winget is op Windows Server 2022 door Microsoft niet officieel ondersteund — het werkt, maar gebruik het bewust in productie. Op Server 2025 is winget wél volwaardig meegeleverd.

Updatebronnen

Stap Bron Methode
1 Windows Update + Microsoft Update PSWindowsUpdate (Install-WindowsUpdate -AcceptAll -IgnoreReboot -IgnoreUserInput), 2 passes
1b Legacy fallback Native COM API (Microsoft.Update.Session), EULA's automatisch geaccepteerd, updates die invoer vereisen worden overgeslagen
2 Winget winget upgrade --all --silent --include-unknown --accept-package-agreements --accept-source-agreements --disable-interactivity --force
3 Microsoft Store WMI/MDM MDM_EnterpriseModernAppManagement_AppManagement01::UpdateScanMethod
4 Microsoft 365 Apps (C2R) OfficeC2RClient.exe /update user displaylevel=false forceappshutdown=true updatepromptuser=false

Over "meldingen doorklikken"

Het script klikt geen UI-meldingen weg. In plaats daarvan wordt elk updatekanaal aangestuurd met zijn officiële unattended-parameters, zodat er nooit een prompt verschijnt. Dat is de betrouwbare variant: UI-automatisering breekt bij elke UI-wijziging, werkt niet onder SYSTEM zonder ingelogde sessie en is niet idempotent.

De enige melding die wél getoond wordt, is de herstartvraag aan het einde.

Update-engine

-UpdateEngine Gedrag
Auto (standaard) PSWindowsUpdate wanneer PowerShell 5.1+ en PSGallery bereikbaar zijn, anders automatisch COM
PSWindowsUpdate Forceer de module; valt alsnog terug op COM als installatie mislukt
COM Forceer de native Windows Update COM API — geen PSGallery, geen internetmodule, werkt vanaf Windows 7 / Server 2008 R2

Gebruik -UpdateEngine COM op afgeschermde servers zonder toegang tot PSGallery.

Vereisten

  • Minimaal: PowerShell 3.0 en administratieve rechten
  • Voor PSWindowsUpdate: PowerShell 5.1 (op Windows 7 / Server 2008 R2 / 2012 R2 vereist dit WMF 5.1, anders gebruikt het script automatisch COM)
  • TLS 1.2 wordt door het script zelf geforceerd
  • Internettoegang naar Windows Update, en optioneel PSGallery / github.com / nuget.org

Uitvoeren

# Standaard: alles bijwerken, 60 minuten wachten op herstartkeuze
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\FullSystemUpdate.ps1

# Windows Server 2022: winget automatisch bijplaatsen, niet herstarten
.\FullSystemUpdate.ps1 -InstallWingetIfMissing -NoRestart

# Legacy of afgeschermde server: native COM-engine
.\FullSystemUpdate.ps1 -UpdateEngine COM

# 30 minuten wachttijd, Office overslaan
.\FullSystemUpdate.ps1 -RestartTimeoutMinutes 30 -SkipOffice

Parameters

Parameter Type Standaard Omschrijving
-RestartTimeoutMinutes Int (11440) 60 Wachttijd op de herstartkeuze voordat geforceerd herstart wordt
-UpdateEngine Auto | PSWindowsUpdate | COM Auto Welke Windows Update-engine gebruikt wordt
-InstallWingetIfMissing Switch $false Plaats App Installer automatisch (VCLibs + UI.Xaml + msixbundle, provisioned)
-SkipWindowsUpdate Switch $false Sla Windows Update over
-SkipWinget Switch $false Sla winget over
-SkipStore Switch $false Sla Microsoft Store over
-SkipOffice Switch $false Sla Microsoft 365 Apps over
-AlwaysPromptRestart Switch $false Toon de melding ook zonder pending reboot
-NoRestart Switch $false Geen melding en geen herstart — aanbevolen voor DC's en productieservers
-WorkRoot String %ProgramData%\FullSystemUpdate Basismap voor logs en het dialoogscript

Geplande taak (aanbevolen)

$action    = New-ScheduledTaskAction -Execute 'powershell.exe' `
             -Argument '-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\FullSystemUpdate.ps1"'
$trigger   = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Saturday -At 02:00
$principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest
$settings  = New-ScheduledTaskSettingsSet -StartWhenAvailable -WakeToRun `
             -ExecutionTimeLimit ([TimeSpan]::FromHours(4))

Register-ScheduledTask -TaskName 'FullSystemUpdate' -Action $action -Trigger $trigger `
                       -Principal $principal -Settings $settings -Force

Draait het script als SYSTEM, dan wordt de herstartmelding via een tijdelijke geplande taak (FullSystemUpdate-RestartPrompt) in de sessie van de ingelogde gebruiker getoond en daarna opgeruimd.

Herstartlogica

Situatie Interne code Gevolg
"Nu opnieuw opstarten" 10 shutdown /r /f /t 15
"Later" 20 Geen herstart
Geen reactie binnen time-out 30 shutdown /r /f /t 60 (geforceerd)
Geen interactieve sessie 30 Geforceerde herstart
Server Core (geen GUI) 40 shutdown /r /f /t <timeout> met native waarschuwing; afbreekbaar met shutdown /a

Het dialoogvenster heeft geen sluitknop, staat altijd bovenop en toont een aftellende timer.

Resultaatcodes

Exitcode Betekenis
0 Alle stappen zonder kritieke fouten afgerond
1 Eén of meer stappen gaven een [ERROR] (niet-kritieke [WARN]s tellen niet mee)
2 Script niet als administrator gestart

Logging

  • Console-output met status-prefixes: [OK], [INFO], [WARN], [ERROR]
  • Logbestand: %ProgramData%\FullSystemUpdate\Logs\FullSystemUpdate_yyyyMMdd_HHmmss.log
  • De header logt OS, rol, PowerShell-versie, gekozen engine en de winget/Store-ondersteuning van het systeem

Idempotentie

Modules en de Microsoft Update-service worden alleen geregistreerd wanneer ze ontbreken, winget slaat bijgewerkte pakketten over, App Installer wordt alleen geplaatst als winget.exe echt ontbreekt, en er wordt uitsluitend herstart wanneer er daadwerkelijk een reboot pending is (tenzij -AlwaysPromptRestart).

Aandachtspunten

  • Gebruik -NoRestart op domeincontrollers en productieservers; het script waarschuwt hier zelf ook voor.
  • forceappshutdown=true sluit draaiende Office-applicaties af. Zet dit op false in Invoke-OfficeStage als dat ongewenst is.
  • winget --force negeert hash-mismatches; verwijder deze vlag in streng beheerde omgevingen.
  • Store-updates verlopen asynchroon; de scan wordt gestart, de installatie voltooit op de achtergrond.
  • Op legacy systemen worden updates die CanRequestUserInput melden bewust overgeslagen en als [WARN] gelogd — die vereisen per definitie handmatige interactie.
  • Voor volledige patching zijn soms twee runs nodig (updates die pas ná een herstart zichtbaar worden).

Bronnen