Added Optimization script

This commit is contained in:
Joeri 2026-02-21 15:21:03 +01:00
parent cd714115cd
commit 8e1e4a4c38

202
optimization.ps1 Normal file
View file

@ -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