From 8e1e4a4c38c88a939a310bd3c96e94129716e44b Mon Sep 17 00:00:00 2001 From: Joeri Date: Sat, 21 Feb 2026 15:21:03 +0100 Subject: [PATCH] Added Optimization script --- optimization.ps1 | 202 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 optimization.ps1 diff --git a/optimization.ps1 b/optimization.ps1 new file mode 100644 index 0000000..6a578af --- /dev/null +++ b/optimization.ps1 @@ -0,0 +1,202 @@ +$ScriptResult.system_optimization = @{ + "chkdsk" = @{ + "run" = $false + "success" = $false + "exit_code" = $null + "message" = "" + "reboot_required" = $false + "errors" = @() + } + "sfc" = @{ + "run" = $false + "success" = $false + "exit_code" = $null + "message" = "" + "files_repaired" = 0 + "errors" = @() + } + "dism" = @{ + "run" = $false + "success" = $false + "exit_code" = $null + "message" = "" + "component_repaired" = $false + "errors" = @() + } +} + +# Run CHKDSK +Write-Host "Running CHKDSK with /R option..." +Write-Host "Note: If volume is in use, CHKDSK will be scheduled for next reboot." +try { + # Use cmd /c echo Y | to automatically answer "Y" to any prompts + $ChkdskOutput = cmd /c "echo Y | chkdsk C: /R" 2>&1 | Out-String + $ChkdskExitCode = $LASTEXITCODE + + $ScriptResult.system_optimization.chkdsk.run = $true + $ScriptResult.system_optimization.chkdsk.exit_code = $ChkdskExitCode + + # Parse output for scheduled check + if ($ChkdskOutput -match "will be checked on next boot|Chkdsk cannot run because the volume is in use") { + $ScriptResult.system_optimization.chkdsk.reboot_required = $true + Write-Host "CHKDSK scheduled for next system restart." + } + + # Parse exit codes + switch ($ChkdskExitCode) { + 0 { + $ScriptResult.system_optimization.chkdsk.success = $true + $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed successfully. No errors found." + } + 1 { + $ScriptResult.system_optimization.chkdsk.success = $true + $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed successfully. Errors corrected." + } + 2 { + $ScriptResult.system_optimization.chkdsk.success = $false + $ScriptResult.system_optimization.chkdsk.message = "CHKDSK did not run due to a parameter error." + } + 3 { + $ScriptResult.system_optimization.chkdsk.success = $true + if (-not $ScriptResult.system_optimization.chkdsk.reboot_required) { + $ScriptResult.system_optimization.chkdsk.reboot_required = $true + } + $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed with errors and requires a reboot to complete." + } + 4 { + $ScriptResult.system_optimization.chkdsk.success = $false + $ScriptResult.system_optimization.chkdsk.message = "CHKDSK encountered errors but could not fix them." + } + 5 { + $ScriptResult.system_optimization.chkdsk.success = $false + if (-not $ScriptResult.system_optimization.chkdsk.reboot_required) { + $ScriptResult.system_optimization.chkdsk.reboot_required = $true + } + $ScriptResult.system_optimization.chkdsk.message = "CHKDSK found errors but requires a reboot to fix them." + } + default { + $ScriptResult.system_optimization.chkdsk.success = $false + $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed with exit code: $ChkdskExitCode" + } + } + + Write-Host "CHKDSK exit code: $ChkdskExitCode" + Write-Host "CHKDSK message: $($ScriptResult.system_optimization.chkdsk.message)" + Write-Host "CHKDSK output: $ChkdskOutput" + + if ($ScriptResult.system_optimization.chkdsk.reboot_required) { + Write-Host "System reboot is required to complete CHKDSK." + } +} catch { + $ErrorMsg = "Failed to run CHKDSK: $($_.Exception.Message)" + $ScriptResult.system_optimization.chkdsk.errors += $ErrorMsg + Write-Host $ErrorMsg +} + +# Run SFC +Write-Host "Running System File Checker (SFC /scannow)..." +try { + $SfcProcess = Start-Process -FilePath "sfc" -ArgumentList "/scannow" -NoNewWindow -Wait -PassThru -ErrorAction Stop + $ExitCode = $SfcProcess.ExitCode + + $ScriptResult.system_optimization.sfc.run = $true + $ScriptResult.system_optimization.sfc.exit_code = $ExitCode + + # Parse exit codes + switch ($ExitCode) { + 0 { + $ScriptResult.system_optimization.sfc.success = $true + $ScriptResult.system_optimization.sfc.message = "SFC completed successfully. No integrity violations found." + $ScriptResult.system_optimization.sfc.files_repaired = 0 + } + 1 { + $ScriptResult.system_optimization.sfc.success = $true + $ScriptResult.system_optimization.sfc.message = "SFC completed successfully. Corrupted files were repaired." + $ScriptResult.system_optimization.sfc.files_repaired = 1 + } + 2 { + $ScriptResult.system_optimization.sfc.success = $false + $ScriptResult.system_optimization.sfc.message = "SFC could not perform the operation. User cancelled or Windows is in safe mode." + } + 3 { + $ScriptResult.system_optimization.sfc.success = $false + $ScriptResult.system_optimization.sfc.message = "SFC could not fix some files. See CBS.log for details." + $ScriptResult.system_optimization.sfc.files_repaired = -1 + } + -1 { # Often shows as 0xFFFFFFFF or -1 + $ScriptResult.system_optimization.sfc.success = $false + $ScriptResult.system_optimization.sfc.message = "SFC encountered an error. Check CBS.log for details." + } + default { + $ScriptResult.system_optimization.sfc.success = $false + $ScriptResult.system_optimization.sfc.message = "SFC completed with unexpected exit code: $ExitCode" + } + } + + Write-Host "SFC exit code: $ExitCode" + Write-Host "SFC message: $($ScriptResult.system_optimization.sfc.message)" + Write-Host "Files repaired: $($ScriptResult.system_optimization.sfc.files_repaired)" +} catch { + $ErrorMsg = "Failed to run SFC: $($_.Exception.Message)" + $ScriptResult.system_optimization.sfc.errors += $ErrorMsg + Write-Host $ErrorMsg +} + +# Run DISM +Write-Host "Running DISM /Online /Cleanup-Image /RestoreHealth..." +try { + $DismProcess = Start-Process -FilePath "DISM" -ArgumentList "/Online /Cleanup-Image /RestoreHealth" -NoNewWindow -Wait -PassThru -ErrorAction Stop + $ExitCode = $DismProcess.ExitCode + + $ScriptResult.system_optimization.dism.run = $true + $ScriptResult.system_optimization.dism.exit_code = $ExitCode + + # Parse exit codes + switch ($ExitCode) { + 0 { + $ScriptResult.system_optimization.dism.success = $true + $ScriptResult.system_optimization.dism.component_repaired = $true + $ScriptResult.system_optimization.dism.message = "DISM completed successfully. The component store was repaired." + } + 87 { + $ScriptResult.system_optimization.dism.success = $false + $ScriptResult.system_optimization.dism.message = "DISM failed. A parameter was invalid. Check the command syntax." + } + 3010 { + $ScriptResult.system_optimization.dism.success = $true + $ScriptResult.system_optimization.dism.component_repaired = $true + $ScriptResult.system_optimization.dism.message = "DISM completed successfully. A reboot is required." + } + 1726 { + $ScriptResult.system_optimization.dism.success = $false + $ScriptResult.system_optimization.dism.message = "DISM failed. The remote procedure call failed." + } + 1910 { + $ScriptResult.system_optimization.dism.success = $false + $ScriptResult.system_optimization.dism.message = "DISM failed. The specified image file could not be found." + } + default { + if ($ExitCode -ge 0 -and $ExitCode -le 100) { + $ScriptResult.system_optimization.dism.success = $true + $ScriptResult.system_optimization.dism.message = "DISM completed with exit code: $ExitCode" + } else { + $ScriptResult.system_optimization.dism.success = $false + $ScriptResult.system_optimization.dism.message = "DISM completed with unexpected exit code: $ExitCode" + } + } + } + + Write-Host "DISM exit code: $ExitCode" + Write-Host "DISM message: $($ScriptResult.system_optimization.dism.message)" + + if ($ExitCode -eq 3010) { + Write-Host "System reboot is recommended after DISM." + } +} catch { + $ErrorMsg = "Failed to run DISM: $($_.Exception.Message)" + $ScriptResult.system_optimization.dism.errors += $ErrorMsg + Write-Host $ErrorMsg +} + +Write-Host "System optimization section completed." +"" | Out-File -FilePath $LogFile -Append -Encoding UTF8 \ No newline at end of file