Advertisement
Guest User

Untitled

a guest
Jul 19th, 2020
1,041
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $ProductData = @(
  2.     [PSCustomObject]@{Name = 'Windows Software Development Kit - Windows 10.0.18362.1'; AdditionalUninstallArgument ='' }
  3.     [PSCustomObject]@{Name = 'WebViewer Plugin'; AdditionalUninstallArgument ='REBOOT=ReallySuppress' }
  4.     [PSCustomObject]@{Name = 'msi'; AdditionalUninstallArgument ='REBOOT=ReallySuppress' }
  5. )
  6.  
  7. $UKeys = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
  8.          'HKLM:\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall\*'
  9.  
  10. foreach ($UKey in $UKeys)
  11. {
  12.     foreach ($Product in (Get-ItemProperty $UKey))
  13.     {
  14.        if ($null -ne ($ProductData.Name | ? { $Product.DisplayName -eq $_ }) )
  15.        {
  16.            #Display Name is in our ProductData.  One to take action on.
  17.            $Product.DisplayName  
  18.            
  19.            #Get any additional argument for the application as defined in ProductData        
  20.            $additionalArgument = $ProductData.Where{$_.Name -eq $Product.DisplayName}.AdditionalUninstallArgument
  21.  
  22.            if ($Product.UninstallString -like "msiexec*") #MSI based - case insensitive match to see if it requires msiexec to remove.
  23.            {
  24.               $ProductCode = $Product.PSChildName #can use the key name as it's the ProductCode.
  25.               write-host "msiexec","/qn","/X$ProductCode","REBOOT=ReallySuppress"
  26.               Start-Process -Wait -NoNewWindow -FilePath "msiexec.exe" -ArgumentList "/qn","/X$ProductCode","REBOOT=ReallySuppress"  -RedirectStandardOutput "NUL"
  27.            }
  28.            else #non MSI
  29.            {
  30.               if ($Product.QuietUninstallString) #THere is a quiet uninstall string for this product, helpful!
  31.               {
  32.                   write-host "QuietUninstallString: " $Product.QuietUninstallString
  33.                   & $env:ComSpec /c $Product.QuietUninstallString
  34.               }
  35.               else
  36.               {
  37.                   write-host "UninstallString: " $Product.UninstallString
  38.  
  39.                   if ($additionalArgument)
  40.                   {
  41.                       write-host $Product.UninstallString $additionalArgument
  42.                       & $env:ComSpec /c $Product.UninstallString $additionalArgument
  43.                   }
  44.                   else
  45.                   {
  46.                       write-host $Product.UninstallString
  47.                       & $env:ComSpec /c $Product.UninstallString
  48.                   }
  49.               }
  50.            }
  51.        }
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement