-
This commit is contained in:
parent
e1229bdeb3
commit
94b344f59c
1 changed files with 166 additions and 20 deletions
186
cleanup.ps1
186
cleanup.ps1
|
|
@ -641,46 +641,192 @@ Write-Log "=====================================================================
|
||||||
Write-Log "SECTION: System Optimization" -Level "INFO"
|
Write-Log "SECTION: System Optimization" -Level "INFO"
|
||||||
Write-Log "================================================================================" -Level "INFO"
|
Write-Log "================================================================================" -Level "INFO"
|
||||||
|
|
||||||
|
# Initialize structured output
|
||||||
|
$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
|
# Run CHKDSK
|
||||||
Write-Log "Running CHKDSK with /R option..." -Level "INFO"
|
Write-Log "Running CHKDSK with /R option..." -Level "INFO"
|
||||||
Write-Log "Note: CHKDSK may require a system reboot to complete." -Level "WARNING"
|
Write-Log "Note: CHKDSK may schedule a disk check on next reboot." -Level "WARNING"
|
||||||
try {
|
try {
|
||||||
$ChkdskResult = cmd /c "echo y | chkdsk /R" 2>&1 | Out-String
|
$ChkdskProcess = Start-Process -FilePath "chkdsk" -ArgumentList "/R" -NoNewWindow -Wait -PassThru -ErrorAction Stop
|
||||||
$ScriptResult.system_optimization.chkdsk_run = $true
|
$ExitCode = $ChkdskProcess.ExitCode
|
||||||
$ScriptResult.system_optimization.chkdsk_result = $ChkdskResult.Trim()
|
|
||||||
Write-Log "CHKDSK command executed." -Level "INFO"
|
$ScriptResult.system_optimization.chkdsk.run = $true
|
||||||
Write-Log "CHKDSK output: $ChkdskResult" -Level "INFO"
|
$ScriptResult.system_optimization.chkdsk.exit_code = $ExitCode
|
||||||
|
|
||||||
|
# Parse exit codes
|
||||||
|
switch ($ExitCode) {
|
||||||
|
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
|
||||||
|
$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
|
||||||
|
$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 unexpected exit code: $ExitCode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Log "CHKDSK exit code: $ExitCode" -Level "INFO"
|
||||||
|
Write-Log "CHKDSK message: $($ScriptResult.system_optimization.chkdsk.message)" -Level "INFO"
|
||||||
|
|
||||||
|
if ($ScriptResult.system_optimization.chkdsk.reboot_required) {
|
||||||
|
Write-Log "System reboot is required to complete CHKDSK." -Level "WARNING"
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
$ErrorMsg = "Failed to run CHKDSK: $($_.Exception.Message)"
|
$ErrorMsg = "Failed to run CHKDSK: $($_.Exception.Message)"
|
||||||
$ScriptResult.system_optimization.errors += $ErrorMsg
|
$ScriptResult.system_optimization.chkdsk.errors += $ErrorMsg
|
||||||
Write-Log $ErrorMsg -Level "ERROR"
|
Write-Log $ErrorMsg -Level "ERROR"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run SFC
|
# Run SFC
|
||||||
Write-Log "Running System File Checker (SFC /scannow)..." -Level "INFO"
|
Write-Log "Running System File Checker (SFC /scannow)..." -Level "INFO"
|
||||||
try {
|
try {
|
||||||
$SfcResult = sfc /scannow 2>&1 | Out-String
|
$SfcProcess = Start-Process -FilePath "sfc" -ArgumentList "/scannow" -NoNewWindow -Wait -PassThru -ErrorAction Stop
|
||||||
$ScriptResult.system_optimization.sfc_run = $true
|
$ExitCode = $SfcProcess.ExitCode
|
||||||
$ScriptResult.system_optimization.sfc_result = $SfcResult.Trim()
|
|
||||||
Write-Log "SFC scan completed." -Level "INFO"
|
$ScriptResult.system_optimization.sfc.run = $true
|
||||||
Write-Log "SFC output: $SfcResult" -Level "INFO"
|
$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-Log "SFC exit code: $ExitCode" -Level "INFO"
|
||||||
|
Write-Log "SFC message: $($ScriptResult.system_optimization.sfc.message)" -Level "INFO"
|
||||||
|
Write-Log "Files repaired: $($ScriptResult.system_optimization.sfc.files_repaired)" -Level "INFO"
|
||||||
} catch {
|
} catch {
|
||||||
$ErrorMsg = "Failed to run SFC: $($_.Exception.Message)"
|
$ErrorMsg = "Failed to run SFC: $($_.Exception.Message)"
|
||||||
$ScriptResult.system_optimization.errors += $ErrorMsg
|
$ScriptResult.system_optimization.sfc.errors += $ErrorMsg
|
||||||
Write-Log $ErrorMsg -Level "ERROR"
|
Write-Log $ErrorMsg -Level "ERROR"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run DISM
|
# Run DISM
|
||||||
Write-Log "Running DISM restore health..." -Level "INFO"
|
Write-Log "Running DISM /Online /Cleanup-Image /RestoreHealth..." -Level "INFO"
|
||||||
try {
|
try {
|
||||||
$DismResult = DISM /Online /Cleanup-Image /RestoreHealth 2>&1 | Out-String
|
$DismProcess = Start-Process -FilePath "DISM" -ArgumentList "/Online /Cleanup-Image /RestoreHealth" -NoNewWindow -Wait -PassThru -ErrorAction Stop
|
||||||
$ScriptResult.system_optimization.dism_run = $true
|
$ExitCode = $DismProcess.ExitCode
|
||||||
$ScriptResult.system_optimization.dism_result = $DismResult.Trim()
|
|
||||||
Write-Log "DISM restore health completed." -Level "INFO"
|
$ScriptResult.system_optimization.dism.run = $true
|
||||||
Write-Log "DISM output: $DismResult" -Level "INFO"
|
$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-Log "DISM exit code: $ExitCode" -Level "INFO"
|
||||||
|
Write-Log "DISM message: $($ScriptResult.system_optimization.dism.message)" -Level "INFO"
|
||||||
|
|
||||||
|
if ($ExitCode -eq 3010) {
|
||||||
|
Write-Log "System reboot is recommended after DISM." -Level "WARNING"
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
$ErrorMsg = "Failed to run DISM: $($_.Exception.Message)"
|
$ErrorMsg = "Failed to run DISM: $($_.Exception.Message)"
|
||||||
$ScriptResult.system_optimization.errors += $ErrorMsg
|
$ScriptResult.system_optimization.dism.errors += $ErrorMsg
|
||||||
Write-Log $ErrorMsg -Level "ERROR"
|
Write-Log $ErrorMsg -Level "ERROR"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue