Guard MSI UpgradeCode lookup against missing registry key#1
Closed
Tom Plant (pl4nty) wants to merge 1 commit into
Closed
Guard MSI UpgradeCode lookup against missing registry key#1Tom Plant (pl4nty) wants to merge 1 commit into
Tom Plant (pl4nty) wants to merge 1 commit into
Conversation
Get-ADTApplication built its MSI UpgradeCode lookup table with an unguarded Get-ChildItem on HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes. On machines where that key does not exist (e.g. images with no MSI-registered upgrade codes), Get-ChildItem threw a PathNotFound error that aborted the function's begin block, breaking any caller such as Uninstall-ADTApplication. Add -ErrorAction Ignore to match the pattern already used for the uninstall key enumeration. When the key is absent the pipeline yields no items, the scriptblock's begin/end blocks still run, and the lookup table is simply empty; downstream indexing already returns $null for GUIDs that are not present. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XLNM98Nd3HZLTWFatRVgB1
Member
|
Thanks mate, didn't even consider the possibility of this when I put this in a few weeks ago! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Get-ADTApplication'sbeginblock builds an MSI UpgradeCode lookup table with an unguardedGet-ChildItemonHKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes. On machines where that key does not exist (e.g. clean images / Windows Sandbox with no MSI-registered upgrade codes),Get-ChildItemthrows:Because this happens in the
beginblock, it aborts the entire function and every caller — includingUninstall-ADTApplication, as seen in the reported stack trace.The fix adds
-ErrorAction Ignoreto thatGet-ChildItem, matching the pattern already used a few lines down for the uninstall-key enumeration. When the key is absent the pipeline yields no items, the scriptblock'sbegin/endblocks still run, and$msiUpgradeCodeLookupTableis simply an empty dictionary. Downstream indexing ($msiUpgradeCodeLookupTable[$appMsiGuid]) already returns$nullfor GUIDs that are not present, so behaviour is unchanged for the common case and no longer throws for the empty case.Type of change
Checklist
How Has This Been Tested?
Not yet run against a live host —
pwshis unavailable in the CI/dev environment used here. The change is a single-parameter addition consistent with the existing-ErrorAction Ignoreusage in the same function. Recommended verification: on a machine lacking theInstaller\UpgradeCodesregistry key, confirmGet-ADTApplication(andUninstall-ADTApplication) now complete without aPathNotFounderror and still return installed applications.🤖 Generated with Claude Code
https://claude.ai/code/session_01XLNM98Nd3HZLTWFatRVgB1
Generated by Claude Code