From eea96f596e0a8144999646c396a2431505775497 Mon Sep 17 00:00:00 2001 From: MyDrift Date: Mon, 3 Mar 2025 21:16:27 +0100 Subject: [PATCH] refractor Windows Update Tab - move update presets to smaller collumn - add new collumn for windows update manager - add datagrid - add datagrid style --- functions/public/Invoke-WPFButton.ps1 | 1 + functions/public/Invoke-WPFScanUpdates.ps1 | 50 ++++ xaml/inputXML.xaml | 328 ++++++++++++++++----- 3 files changed, 307 insertions(+), 72 deletions(-) create mode 100644 functions/public/Invoke-WPFScanUpdates.ps1 diff --git a/functions/public/Invoke-WPFButton.ps1 b/functions/public/Invoke-WPFButton.ps1 index 0b79e553dc..f2e528fb36 100644 --- a/functions/public/Invoke-WPFButton.ps1 +++ b/functions/public/Invoke-WPFButton.ps1 @@ -61,5 +61,6 @@ function Invoke-WPFButton { "WPFWinUtilInstallPSProfile" {Invoke-WinUtilInstallPSProfile} "WPFWinUtilUninstallPSProfile" {Invoke-WinUtilUninstallPSProfile} "WPFWinUtilSSHServer" {Invoke-WPFSSHServer} + "WPFScanUpdates" {Invoke-WPFScanUpdates} } } diff --git a/functions/public/Invoke-WPFScanUpdates.ps1 b/functions/public/Invoke-WPFScanUpdates.ps1 new file mode 100644 index 0000000000..cb41532cb9 --- /dev/null +++ b/functions/public/Invoke-WPFScanUpdates.ps1 @@ -0,0 +1,50 @@ +function Invoke-WPFScanUpdates { + + + Invoke-WPFRunspace -DebugPreference $DebugPreference -ScriptBlock { + # Check if the PSWindowsUpdate module is installed + if (-not (Get-Module -ListAvailable -Name PSWindowsUpdate)) { + try { + Write-Host "PSWindowsUpdate module not found. Attempting to install..." + Install-Module -Name PSWindowsUpdate -Force -Scope CurrentUser + Write-Host "PSWindowsUpdate module installed successfully." + } + catch { + Write-Error "Failed to install PSWindowsUpdate module: $_" + return + } + } + + # Import the module + try { + Import-Module PSWindowsUpdate -ErrorAction Stop + Write-Host "PSWindowsUpdate module imported successfully." + } + catch { + Write-Error "Failed to import PSWindowsUpdate module: $_" + return + } + + try { + Write-Host "Clearing updates list..." + $sync.form.Dispatcher.Invoke([action] { $sync["WPFUpdatesList"].Items.Clear() }) + Write-Host "Scanning for Windows updates..." + $updates = Get-WindowsUpdate -ErrorAction Stop + Write-Host "Found $($updates.Count) updates." + + $sync.form.Dispatcher.Invoke([action] { + foreach ($update in $updates) { + $item = New-Object PSObject -Property @{ + KB = $update.KB + Size = $update.Size + Title = $update.Title -replace '\s*\(KB\d+\)', '' -replace '\s*KB\d+\b', '' # Remove KB number from title, first in parentheses, then standalone + Status = "Not Installed" + } + $sync["WPFUpdatesList"].Items.Add($item) + } + }) + } catch { + Write-Error "Error scanning for updates: $_" + } + } +} diff --git a/xaml/inputXML.xaml b/xaml/inputXML.xaml index 63a41af54e..b251886918 100644 --- a/xaml/inputXML.xaml +++ b/xaml/inputXML.xaml @@ -842,6 +842,182 @@ + + + + + + + + + + + + + + @@ -1135,95 +1311,103 @@ - - + + - - - + - - - + + + +