<# .SYNOPSIS Preview Windows Update Notifications .DESCRIPTION Test script to preview all notification types without checking for real updates .NOTES Author: oxmc #> # Import notification module Import-Module "$PSScriptRoot\UpdateNotifications.psm1" -Force Write-Host "=== Windows Update Notification Preview ===" -ForegroundColor Cyan Write-Host "" Write-Host "This script will show you all the different notifications" -ForegroundColor Yellow Write-Host "" # Create some fake updates for demonstration $fakeUpdates = @( [PSCustomObject]@{ Title = "2024-01 Cumulative Update for Windows 11 Version 23H2 for x64-based Systems (KB5034123)" Description = "This security update includes improvements and fixes that are part of the latest servicing stack update for Windows. Installing this update ensures that your computer can receive future Windows updates." MaxDownloadSize = 125000000 Type = 1 Categories = @([PSCustomObject]@{ Name = "Critical Updates" }) }, [PSCustomObject]@{ Title = "Windows Defender Antivirus Definition Update - KB2267602 (Definition 1.403.2345.0)" Description = "Install this update to revise the definition files that are used to detect viruses, spyware, and other potentially unwanted software." MaxDownloadSize = 45000000 Type = 1 Categories = @([PSCustomObject]@{ Name = "Definition Updates" }) }, [PSCustomObject]@{ Title = "2024-01 Security Update for .NET Framework 4.8 for Windows 11 (KB5034122)" Description = "A security issue has been identified in a Microsoft software product that could affect your system. You can help protect your system by installing this update from Microsoft." MaxDownloadSize = 98000000 Type = 1 Categories = @([PSCustomObject]@{ Name = "Security Updates" }) }, [PSCustomObject]@{ Title = "Intel - System - 10.1.19.5 - Graphics Driver Update" Description = "This package provides the Intel Graphics Driver and is supported on OptiPlex, Precision, and Latitude models that are running the following Windows Operating Systems: Windows 10." MaxDownloadSize = 148000000 Type = 2 Categories = @([PSCustomObject]@{ Name = "Drivers" }) }, [PSCustomObject]@{ Title = "2024-01 Servicing Stack Update for Windows 11 Version 23H2 (KB5034121)" Description = "Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article." MaxDownloadSize = 12000000 Type = 1 Categories = @([PSCustomObject]@{ Name = "Important" }) } ) function Show-Menu { Clear-Host Write-Host "=== Notification Preview Menu ===" -ForegroundColor Cyan Write-Host "" Write-Host "1. Preview 'Updates Available' Toast Notification" -ForegroundColor White Write-Host "2. Preview 'Installing Updates' Toast Notification" -ForegroundColor White Write-Host "3. Preview 'Updates Complete' Toast Notification" -ForegroundColor White Write-Host "4. Preview 'Updates Complete with Reboot' Toast Notification" -ForegroundColor White Write-Host "5. Preview 'Installation Failed' Toast Notification" -ForegroundColor White Write-Host "6. Preview 'Reboot Required' Toast Notification" -ForegroundColor White Write-Host "" Write-Host "7. Preview Balloon Tip Notification (Info)" -ForegroundColor White Write-Host "8. Preview Balloon Tip Notification (Warning)" -ForegroundColor White Write-Host "9. Preview Balloon Tip Notification (Error)" -ForegroundColor White Write-Host "" Write-Host "10. Preview Detailed Update Window (Interactive)" -ForegroundColor Green Write-Host "11. Preview Installation Progress Window" -ForegroundColor Green Write-Host "" Write-Host "12. Show All Notifications (One by One)" -ForegroundColor Yellow Write-Host "" Write-Host "Q. Quit" -ForegroundColor Red Write-Host "" } do { Show-Menu Write-Host "Select an option: " -NoNewline -ForegroundColor Yellow $choice = Read-Host switch ($choice) { "1" { Write-Host "`nShowing 'Updates Available' toast notification..." -ForegroundColor Green Show-UpdateAvailableToast -UpdateCount 5 -Updates $fakeUpdates Write-Host "Check your Action Center (Win+A) to see the notification!" -ForegroundColor Cyan Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "2" { Write-Host "`nShowing 'Installing Updates' toast notification..." -ForegroundColor Green Show-UpdateInstallingToast -UpdateCount 5 Write-Host "Check your Action Center (Win+A) to see the notification!" -ForegroundColor Cyan Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "3" { Write-Host "`nShowing 'Updates Complete' toast notification..." -ForegroundColor Green Show-UpdateCompleteToast -SuccessCount 5 -RebootRequired $false Write-Host "Check your Action Center (Win+A) to see the notification!" -ForegroundColor Cyan Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "4" { Write-Host "`nShowing 'Updates Complete with Reboot' toast notification..." -ForegroundColor Green Show-UpdateCompleteToast -SuccessCount 5 -RebootRequired $true Write-Host "Check your Action Center (Win+A) to see the notification!" -ForegroundColor Cyan Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "5" { Write-Host "`nShowing 'Installation Failed' toast notification..." -ForegroundColor Green Show-UpdateFailedToast -ErrorMessage "Error code: 0x80070002 - One or more updates failed to install" Write-Host "Check your Action Center (Win+A) to see the notification!" -ForegroundColor Cyan Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "6" { Write-Host "`nShowing 'Reboot Required' toast notification..." -ForegroundColor Green Show-RebootRequiredToast -MinutesUntilReboot 15 Write-Host "Check your Action Center (Win+A) to see the notification!" -ForegroundColor Cyan Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "7" { Write-Host "`nShowing Info balloon notification..." -ForegroundColor Green Write-Host "Look at your system tray!" -ForegroundColor Cyan Show-BalloonNotification -Title "Windows Update Manager" ` -Message "5 updates are available for your computer" ` -Icon "Info" ` -Duration 5000 Write-Host "`nBalloon notification shown!" -ForegroundColor Green Start-Sleep -Seconds 1 } "8" { Write-Host "`nShowing Warning balloon notification..." -ForegroundColor Green Write-Host "Look at your system tray!" -ForegroundColor Cyan Show-BalloonNotification -Title "Restart Required" ` -Message "Your computer needs to restart to complete updates" ` -Icon "Warning" ` -Duration 5000 Write-Host "`nBalloon notification shown!" -ForegroundColor Green Start-Sleep -Seconds 1 } "9" { Write-Host "`nShowing Error balloon notification..." -ForegroundColor Green Write-Host "Look at your system tray!" -ForegroundColor Cyan Show-BalloonNotification -Title "Update Failed" ` -Message "Some updates could not be installed. Error code: 0x80070002" ` -Icon "Error" ` -Duration 5000 Write-Host "`nBalloon notification shown!" -ForegroundColor Green Start-Sleep -Seconds 1 } "10" { Write-Host "`nOpening detailed update window..." -ForegroundColor Green Write-Host "This is interactive - you can select updates and click buttons!" -ForegroundColor Cyan Write-Host "" $result = Show-UpdateDetailsWindow -Updates $fakeUpdates Write-Host "`nYou selected: $($result.Action)" -ForegroundColor Yellow if ($result.Action -eq "Install") { Write-Host "Updates selected: $($result.Updates.Count)" -ForegroundColor Green foreach ($update in $result.Updates) { Write-Host " - $($update.Title)" -ForegroundColor Gray } } Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "11" { Write-Host "`nShowing installation progress window..." -ForegroundColor Green Write-Host "This will show for 10 seconds..." -ForegroundColor Cyan $progressForm = Show-InstallationProgressWindow -Updates $fakeUpdates # Simulate progress for ($i = 1; $i -le 5; $i++) { Start-Sleep -Seconds 2 Update-InstallationProgress -Form $progressForm -Current $i -Total 5 -CurrentUpdate $fakeUpdates[$i-1].Title } if ($progressForm -and -not $progressForm.IsDisposed) { $progressForm.Close() $progressForm.Dispose() } Write-Host "`nProgress window closed!" -ForegroundColor Green Write-Host "Press any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "12" { Write-Host "`nShowing all notifications sequentially..." -ForegroundColor Green Write-Host "" Write-Host "1/9 - Updates Available (Toast)" -ForegroundColor Cyan Show-UpdateAvailableToast -UpdateCount 5 -Updates $fakeUpdates Start-Sleep -Seconds 3 Write-Host "2/9 - Installing Updates (Toast)" -ForegroundColor Cyan Show-UpdateInstallingToast -UpdateCount 5 Start-Sleep -Seconds 3 Write-Host "3/9 - Updates Complete (Toast)" -ForegroundColor Cyan Show-UpdateCompleteToast -SuccessCount 5 -RebootRequired $false Start-Sleep -Seconds 3 Write-Host "4/9 - Reboot Required (Toast)" -ForegroundColor Cyan Show-RebootRequiredToast -MinutesUntilReboot 15 Start-Sleep -Seconds 3 Write-Host "5/9 - Installation Failed (Toast)" -ForegroundColor Cyan Show-UpdateFailedToast -ErrorMessage "Error code: 0x80070002" Start-Sleep -Seconds 3 Write-Host "6/9 - Info Balloon" -ForegroundColor Cyan Show-BalloonNotification -Title "Updates Available" -Message "5 updates ready" -Icon "Info" -Duration 3000 Write-Host "7/9 - Warning Balloon" -ForegroundColor Cyan Show-BalloonNotification -Title "Restart Required" -Message "Please restart soon" -Icon "Warning" -Duration 3000 Write-Host "8/9 - Error Balloon" -ForegroundColor Cyan Show-BalloonNotification -Title "Update Failed" -Message "Installation error" -Icon "Error" -Duration 3000 Write-Host "9/9 - Detailed Window (will open now)" -ForegroundColor Cyan Start-Sleep -Seconds 2 $null = Show-UpdateDetailsWindow -Updates $fakeUpdates Write-Host "`nAll notifications shown!" -ForegroundColor Green Write-Host "Check your Action Center (Win+A) to see the toast notifications!" -ForegroundColor Cyan Write-Host "`nPress any key to continue..." -ForegroundColor Gray $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } "Q" { Write-Host "`nExiting..." -ForegroundColor Green } default { Write-Host "`nInvalid option. Please try again." -ForegroundColor Red Start-Sleep -Seconds 1 } } } while ($choice -ne "Q" -and $choice -ne "q") Write-Host "`nThanks for previewing the notifications!" -ForegroundColor Cyan