Question

I wanted to loop through registry entries using powershell and uninstall certain MSIs.

I found the answer in this post very simillar to my requirement. However I have a slight different requirement. (I dont want to use UnInstall String)

I get a list of all registries in 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall' and I want to use the NAME (i.e. the productcode) of the registry itself.

My Question: How to get the name of the registry.

Was it helpful?

Solution

You need to use Get-ChildItem.

For example, this gives the Name of the key under Uninstall key.

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | Select PSChildName

Update based on the comment:

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | Where-Object {
 $_.PSChildName -Eq '{D2B9C003-A3CD-44A0-9DE5-52FE986C03E5}'} | Select PSChildName

OTHER TIPS

You shouldn't really be trolling the registry. The correct way to do this for MSI-based installs is to use MsiEnumProducts to find all the installed MSI products, use the returned product code to get info about their names and versions (MsiGetProductInfo) to see if you want to uninstall them, and then use MsiConfigureProduct and set them to installstate_absent. If you dig around you may find some p/invoke interop code to do this from managed code, that would get you into PowerShell.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top