mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2026-10-08 11:39:10 +11:00
Add friendly explanations for common DISM exit codes (#5087)
* Add friendly explanations for common DISM exit codes Invoke-WinUtilISODism threw only a raw exit code on DISM failure (e.g. "DISM add-driver failed with exit code 112"), leaving users to look up what the number means themselves. Adds a $knownExitCode lookup table mapping common Windows/DISM exit codes (disk full, access denied, file/path not found, file in use, timeout, etc.) to plain-English explanations. When a failure's exit code is recognized, the thrown message now includes the explanation in parentheses; unrecognized codes fall back to the original plain-number message. Verified the script still parses correctly after the change. * Add missing period to fallback DISM error message * Add tests for DISM known/unknown exit code error messages Adds a test verifying a known exit code (112) produces the friendly explanation in the thrown message, alongside the existing test verifying an unrecognized code still falls back to the plain numeric message. Verified: all 35 tests in win11creator.Tests.ps1 pass. * Document DISM friendly error messages in Win11 Creator troubleshooting Adds a Troubleshooting table row explaining the new DISM error message format (exit code + explanation in parentheses), with guidance for the most common cases and a link to Microsoft's full error code reference for anything not explained. * Fix duplicate DISM calls in unmapped exit code test The unmapped-code test called Invoke-WinUtilISOScript twice — once via Should -Throw, once to capture the message for the no-parens check — causing $script:dismCalls to double-count. Consolidated to a single call, checking both the exit code and the absence of a parenthesized explanation against one captured exception message. Verified: all 36 tests in win11creator.Tests.ps1 pass. * Fix broken DISM error code reference link in docs Replaced the dead windows-hardware/manufacture link with Microsoft's actual System Error Codes reference page, which DISM exit codes correspond to. * Strengthen DISM fallback regression coverage --------- Co-authored-by: Chris Titus <contact@christitus.com>
This commit is contained in:
@@ -185,6 +185,21 @@ function Invoke-WinUtilISOScript {
|
||||
return @($survivingFolders)
|
||||
}
|
||||
|
||||
$knownExitCode = @{
|
||||
112 = "Disk is full"
|
||||
5 = "Access denied"
|
||||
2 = "File not found"
|
||||
3 = "Path not found"
|
||||
87 = "Invalid parameter"
|
||||
1168 = "Element not found"
|
||||
1392 = "File or directory is corrupted"
|
||||
32 = "File in use / sharing violation"
|
||||
21 = "Device not ready"
|
||||
1460 = "Operation timed out"
|
||||
1223 = "Operation cancelled by user"
|
||||
50 = "Request not supported"
|
||||
}
|
||||
|
||||
function Invoke-WinUtilISODism {
|
||||
param (
|
||||
[Parameter(Mandatory)][string[]]$Arguments,
|
||||
@@ -199,7 +214,11 @@ function Invoke-WinUtilISOScript {
|
||||
& $Logger " dism[$Operation]: $line"
|
||||
}
|
||||
}
|
||||
throw "DISM $Operation failed with exit code $exitCode."
|
||||
if ($knownExitCode.ContainsKey($exitCode)) {
|
||||
throw "DISM $Operation failed with exit code $exitCode ($($knownExitCode[$exitCode]))."
|
||||
} else {
|
||||
throw "DISM $Operation failed with exit code $exitCode."
|
||||
}
|
||||
}
|
||||
if ($Operation -ne 'metadata') {
|
||||
& $Logger "DISM $Operation completed."
|
||||
|
||||
Reference in New Issue
Block a user