Auto-commit: 2025-10-31 08:55:43

This commit is contained in:
David Wuibaille
2025-10-31 08:55:43 +01:00
parent 9bb5ad24bb
commit 24c0c6509f
33 changed files with 13144 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
# MSU Prerequisite Check and Install Script
$LogPath = "C:\Windows\Temp\MSU_Install.log"
function Write-Log {
param([string]$Message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path $LogPath -Value "$timestamp $Message"
Write-Host $Message
}
# Check 1: Reboot pending
$RebootRegKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'
if (Test-Path $RebootRegKey) {
Write-Log "Pending reboot detected."
exit 101
} else {
Write-Log "No pending reboot."
}
# Check 3: Free space on C:
$minFreeGB = 5
$drive = Get-PSDrive -Name C
if ($null -eq $drive -or ($drive.Free/1GB) -lt $minFreeGB) {
Write-Log "Insufficient free space on C:. Required: ${minFreeGB}GB"
exit 103
} else {
Write-Log ("Sufficient free space on C:. Free: {0:N2}GB" -f ($drive.Free/1GB))
}
# MSU download info
$MSUFile = "windows10.0-kb5060531-x64.msu"
$MSUUrl = "https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2025/06/windows10.0-kb5060531-x64_83789c3b9350e10e207370622c4ef54dd685ee02.msu"
$ScriptDir = "c:\windows\temp"
$MSUPath = Join-Path $ScriptDir $MSUFile
# Always delete the MSU file before download
if (Test-Path $MSUPath) {
Write-Log "Deleting existing MSU file: $MSUPath"
Remove-Item -Path $MSUPath -Force -ErrorAction SilentlyContinue
}
try {
Write-Log "Downloading MSU from $MSUUrl using System.Net.WebClient"
$sw = [System.Diagnostics.Stopwatch]::StartNew()
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($MSUUrl, $MSUPath)
$sw.Stop()
$downloadTime = "{0:N2}" -f $sw.Elapsed.TotalSeconds
if (-not (Test-Path $MSUPath)) {
Write-Log "Failed to download MSU (file not found after download)"
exit 104
} else {
Write-Log "Download completed: $MSUPath"
Write-Log "Download time: $downloadTime seconds"
}
} catch {
Write-Log "Failed to download MSU with WebClient: $_"
exit 104
}
Write-Log "Starting installation of $MSUPath"
# Install the MSU silently, no restart
$process = Start-Process -FilePath "wusa.exe" -ArgumentList "`"$MSUPath`" /quiet /norestart" -Wait -PassThru
$exitCode = $process.ExitCode
Write-Log "wusa.exe exit code: $exitCode"
# Return the exit code as the script's own exit code
exit $exitCode