Powershell-Controleer en vind de product GUID van een geïnstalleerde MSI setup

om deze sectie volledig te ontgrendelen moet u inloggen

de productcode is de unieke leidraad voor het identificeren van een toepassing of product release; met andere woorden, verschillende versies en talen van het Product moeten verschillende productcodes hebben.

ook kan ProductCode worden gebruikt om de functiestatus en de productstatus te bevragen. Bijvoorbeeld, installer API “MsiQueryFeatureStateEx ()” en ” MsiQueryProductState ()”, enz.

de volgende vier benaderingen kunnen ons verschillende methoden geven om de GUID van geïnstalleerde MSI-pakketten (ook op afstand) te vinden en op te halen:

gebruik de Powershell “one-liner”

elke zelfreparatie die door deze optie wordt geactiveerd, zou over het algemeen kunnen worden geannuleerd. Het pakket integriteitscontroles geactiveerd voegt wel wat gebeurtenislogboek” ruis ” toe. Neem niet dat Identificatie Nummer is de ProductCode (WMI eigenaardigheid).

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

snelle start van Powershell: houd de Windows-toets ingedrukt, tik op R, typ “powershell” in en druk op Enter.

gebruik VBScript

deze optie kan veiliger zijn dan Powershell om redenen die hieronder in detail worden uitgelegd.

in wezen is het (veel) sneller en kan het MSI zelfreparatie niet activeren omdat het niet via WMI gaat (het heeft rechtstreeks toegang tot de MSI COM API-met blaarsnelheid). Echter, het is meer betrokken dan de Powershell optie (verschillende regels code).

u kunt een VBScript proberen om toegang te krijgen tot informatie via de MSI-automatiseringsinterface (kernfunctie van Windows – het heeft geen verband met WMI).

  • kopieer het onderstaande script en plak in een *.vbs-bestand op uw bureaublad, en probeer het uit te voeren door te dubbelklikken. Uw bureaublad moet beschrijfbaar zijn voor u, of u kunt elke andere beschrijfbare locatie gebruiken.
  • dit is een voorbeeld van VBScript. Kortzichtigheid heeft de voorkeur boven foutafhandeling en volledigheid, maar het moet het werk doen met een minimale complexiteit.
  • het uitvoerbestand wordt aangemaakt in de map waaruit u het script uitvoert (map moet beschrijfbaar zijn). Het uitvoerbestand heet msiinfo.csv.
  • Dubbelklik op het bestand om te openen in een spreadsheet-toepassing, selecteer komma als scheidingsteken bij importeren-of-open gewoon het bestand in Kladblok of een tekstviewer. Het openen in een spreadsheet zal geavanceerde sorteerfuncties toestaan.
  • dit script kan eenvoudig worden aangepast om een aanzienlijke hoeveelheid verdere details over de MSI installatie te tonen.

'#### Retrieve all ProductCodes (with ProductName and ProductVersion)Set fso = CreateObject("Scripting.FileSystemObject")Set output = fso.CreateTextFile("msiinfo.csv", True, True)Set installer = CreateObject("WindowsInstaller.Installer")On Error Resume Next ' we ignore all errorsFor Each product In installer.ProductsEx("", "", 7) productcode = product.ProductCode name = product.InstallProperty("ProductName") version=product.InstallProperty("VersionString") output.writeline (productcode & ", " & name & ", " & version)Nextoutput.Close

Registry Lookup

u kunt de productcode ook vinden door het register door te nemen met deze basissleutel: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall.

druk op de F3-toets en zoek naar uw Productnaam. Als het een 32-bits installatieprogramma op een 64-bits machine is, kan het onder de volgende sleutel staan: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.

de volgende registersleutels zijn de gemeenschappelijke locaties waar de GUIDs van MSI-pakketten worden gezocht en gevonden:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

origineel MSI-bestand

u kunt de productcode vinden in de Property table van elk MSI-bestand (en elke andere eigenschap ook). Echter, de GUID kan denkbaar (zelden) worden overschreven door een transformatie toegepast bij de installatie tijd en dus niet overeenkomen met de GUID het product is geregistreerd onder (benadering 1 en 2 hierboven zal de echte productcode – die is geregistreerd bij Windows – in dergelijke zeldzame scenario ‘ s).

u hebt een hulpmiddel nodig om MSI-bestanden te bekijken. Zie onderaan het volgende antwoord voor een lijst met gratis tools die u kunt downloaden( of zie de snelle optie hieronder): hoe kan ik de inhoud van twee (of meer) MSI-bestanden vergelijken?

voor het gemak en de behoefte aan snelheid, kunt u SuperOrca zonder vertraging en gedoe downloaden van deze direct-download hotlink – de tool is goed genoeg om de klus te klaren-installeer, open MSI en ga direct naar de Property table en vind de productcode rij (gelieve altijd virus check een direct-download hotlink-uiteraard-u kunt gebruiken virustotal.com om dit te doen – online scan gebruik te maken van tientallen anti-virus en malware suites om te scannen wat u uploadt).

een andere, de originele, tool Orca is Microsoft ‘ s eigen tool, het is geïnstalleerd met Visual Studio en de Windows SDK. Probeer te zoeken naar Orca-x86_nl-us.msi, onder programmabestanden (x86) en installeer de MSI indien gevonden.

productcodes ophalen

opstart Powershell (houd de Windows-toets ingedrukt, tik op R, laat de Windows-toets los, typ “powershell” in en druk op OK) en voer het onderstaande commando uit om een lijst met geïnstalleerde MSI-pakketcodes te krijgen samen met het lokale cachepakket-pad en de productnaam (maximaliseer het PowerShell-venster om verkorte namen te voorkomen).

voordat u deze commandoregel uitvoert, dient u de onderstaande disclaimer te lezen (niets gevaarlijks, slechts enkele mogelijke hinder). Als u probeert om een pakket te verwijderen is er een sectie hieronder met een voorbeeld msiexec.exe opdrachtregels:

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

de uitvoer moet vergelijkbaar zijn met deze:

Powershell-Controleer en vind de product GUID van een geïnstalleerde MSI setup

om een vreemde reden wordt de ” ProductCode “aangeduid als” IdentifyingNumber ” in WMI. Dus met andere woorden, in de afbeelding hierboven is het identificatienummer de ProductCode.

door een vreemd Microsoft-ontwerp zal elke WMI-aanroep naar Win32_Product (zoals de PowerShell-opdracht hieronder) een validatie van het pakket veroorzaken. Naast het feit dat vrij langzaam, dit kan in zeldzame gevallen leiden tot een MSI zelfreparatie. Dit kan een klein pakket of iets reusachtig zijn-zoals Visual Studio. In de meeste gevallen gebeurt dit niet, maar er is een risico.

voer dit commando niet uit vlak voor een belangrijke bijeenkomst, het is nooit gevaarlijk (het is een alleen-lezen query), maar het kan in zeer zeldzame gevallen leiden tot een lange reparatie.

u kunt ook de uitvoer in lijstvorm krijgen (in plaats van tabel):

get-wmiobject -class Win32_Product

In dit geval is de uitvoer vergelijkbaar met deze:

Powershell-Controleer en vind de product GUID van een geïnstalleerde MSI setup

productcodes ophalen van een externe Computer

in theorie zou je gewoon in staat moeten zijn om een externe computernaam op te geven als onderdeel van het commando zelf. Hier is hetzelfde commando als hierboven ingesteld om te draaien op de machine “RemoteMachine” (- ComputerName RemoteMachine sectie toegevoegd):

get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

dit kan werken als u met domeinbeheerrechten op een juist domein draait. In een werkgroepomgeving (klein kantoor / thuisnetwerk) moet u waarschijnlijk gebruikersreferenties rechtstreeks toevoegen aan de WMI-oproepen om het te laten werken.

daarnaast worden externe verbindingen in WMI beïnvloed door (ten minste) de Windows Firewall, DCOM-instellingen en gebruikersaccountbeheer (UAC) (plus eventuele extra niet-Microsoft-factoren, bijvoorbeeld extra fysieke of virtuele firewalls, software van derden firewalls, beveiligingssoftware van verschillende soorten, enz.). Of het zal werken of niet, hangt meestal af van uw exacte setup.

Powershell

PowerShell vereist dat het. NET framework wordt geïnstalleerd, maar op de meeste moderne besturingssystemen (Windows Server en Windows platforms is Powershell al opgenomen en beschikbaar). De werkelijke PowerShell-toepassing zelf kan ook ontbreken in de machine, zelfs als. NET is geïnstalleerd. Ten slotte kan PowerShell worden uitgeschakeld of vergrendeld door verschillende systeembeleid en privileges.

als dit het geval is, kunt u een paar andere manieren proberen om productcodes op te halen. Een alternatief is VBScript-het is snel en flexibel (maar kan ook worden vergrendeld op bepaalde machines, en scripting is altijd een beetje meer betrokken dan het gebruik van tools).

laten we beginnen met een ingebouwde Windows WMI tool, meestal gebruikt voor het testen van WMI componenten en functionaliteiten: wbemtest.executable.

  • start wbemtest.exe (Houd de Windows-toets ingedrukt, tik op R, laat de Windows-toets los, typ in ” wbemtest.exe ” en druk op OK).
  • klik op connect en dan OK (naamruimte staat standaard op root\cimv2), en klik opnieuw op “connect”.
  • klik op “Query” en typ dit WQL Commando (SQL flavor): selecteer IdentifyingNumber,Name,Version FROM Win32_Product.
  • klik op “Use” (of gelijkwaardig – het gereedschap zal gelokaliseerd worden).

voorbeeld uitvoer screenshot is het volgende. Niet de mooiste opmaak, maar je kunt de gegevens krijgen die je nodig hebt. Identificatie nummer is de MSI product code:

Powershell-Controleer en vind de product GUID van een geïnstalleerde MSI setup

vervolgens kunt u een aangepaste, meer volledige WMI tool zoals WMIExplorer proberen.executable.

  • Dit is niet inbegrepen in Windows. Het is echter een zeer goed hulpmiddel.
  • kijk op: https://github.com/vinaypamnani/wmie2/releases.
  • start het gereedschap, klik op Verbinden, dubbelklik ROOT\CIMV2
  • van de “Query tab”, typ in de volgende query Select IdentifyingNumber,Name, Version FROM Win32_Product en druk op Uitvoeren.

krijg GUID voor MSI-pakketten (productcode en UpgradeCode vergelijken)

start PowerShell: houd de Windows-en R-toets samen, laat de Windows-toets los, typ “powershell” in en druk op OK of druk op Enter.

kopieer het script hieronder in zijn geheel en klik met de rechtermuisknop in het PowerShell-venster.

voor Win32_Property filteren we zowel rijen als kolommen (UpgradeCode is slechts een van de vele rij-types). Wees voorbereid op een langzame operatie, WMI is erg traag met dergelijke retrieves.

$wmipackages = Get-WmiObject -Class win32_product$wmiproperties = gwmi -Query "SELECT ProductCode,Value FROM Win32_Property WHERE Property='UpgradeCode'"$packageinfo = New-Object System.Data.Datatable$packageinfo.Columns.Add("Name")$packageinfo.Columns.Add("ProductCode")$packageinfo.Columns.Add("UpgradeCode")foreach ($package in $wmipackages) { $foundupgradecode = $false #Let's assume that no UpgradeCode is found yet. foreach ($property in $wmiproperties) { if ($package.IdentifyingNumber -eq $property.ProductCode) { $packageinfo.Rows.Add($package.Name,$package.IdentifyingNumber, $property.Value) $foundupgradecode = $true break } } if(-Not ($foundupgradecode)) { # No upgrade code found, add product code to list. $packageinfo.Rows.Add($package.Name,$package.IdentifyingNumber, "") }}$packageinfo | Format-table ProductCode, UpgradeCode, Name# Enable the following line to export to CSV (good for annotation). Set full path in quotes.# $packageinfo | Export-Csv "\MsiInfo.csv"

de upgradecode is de unieke leidraad voor het identificeren van een productfamilie. Dat wil zeggen, dezelfde producten met verschillende versies zijn waarschijnlijk verzonden voor een paar releases. Deze producten hebben verschillende ProductCodes, maar ze zijn met elkaar verbonden door dezelfde UpgradeCode te gebruiken.

bijvoorbeeld, aangenomen dat we een product hebben geschreven met de naam “Happy MSI” en dat dit product slechts één MSI-pakket heeft voor implementatie op het client-systeem.

de eerste release van dit product is eigenlijk het MSI-pakket met de naam “version_1.msi”, en de tweede release is ” version_2.msi”. Dan, deze twee MSI moeten dezelfde UpgradeCode hebben. Wanneer gebruikers “version_2.msi ” op hun systeem, de windows installer zal de UpgradeCode gebruiken om te beslissen of eerdere versies van dit product al aanwezig zijn op het systeem.

Installer API ” MsiEnumRelatedProducts ()” gebruikt de UpgradeCode om alle familieproducten te bevragen.

MSI-pakketten verwijderen

als u het MSI-pakket wilt verwijderen en u de productcode (GUID) hebt gevonden, kunt u dit als volgt doen met behulp van een opdrachtprompt met verhoogde bevoegdheid (zoeken naar cmd.exe, klik met de rechtermuisknop en voer uit als admin):

Optie 1: Basic, interactief verwijderen zonder logboekregistratie (snel en eenvoudig):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C}

snelle Parameter uitleg:

  • /X = rennen verwijderen sequentie
  • {00000000-0000-0000-0000-00000000000C} = Product code product verwijderen

U kunt ook de (uitgebreide) het vastleggen en uitvoeren in stille modus als u wilt, die ons naar optie 2:

Optie 2: silent verwijderen met uitgebreide logboekregistratie (beter voor batch-bestanden):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress

Snelle Parameter Uitleg:

  • /X = rennen verwijderen sequentie
  • {00000000-0000-0000-0000-00000000000C} = Product code product verwijderen
  • /QN = helemaal stil
  • /L*V “C:\My.log ” = uitgebreide logging op opgegeven pad
  • REBOOT = ReallySuppress = vermijd onverwacht, plotseling opnieuw opstarten

Leave a Reply

Het e-mailadres wordt niet gepubliceerd.