Powershell-Kontroller og finn PRODUKTGUIDEN for et installert MSI-oppsett

for å låse opp denne delen helt må Du Logge inn

produktkoden er den unike GUIDEN for å identifisere en applikasjon eller produktutgivelse; med andre ord må forskjellige versjoner Og Språk Av Produktet ha forskjellige produktkoder.

ProductCode kan også brukes til å spørre funksjonstilstand og produktstatus. For eksempel, installer API «MsiQueryFeatureStateEx () «og» MsiQueryProductState ()», etc.

følgende fire tilnærminger kan gi oss flere metoder for å finne OG hente (også eksternt) GUID av installerte msi-pakker:

Bruk Powershell «one-liner»

enhver selvreparasjon utløst av dette alternativet bør generelt være mulig å avbryte. Pakken integritetskontroller utløst legger til noen hendelseslogg» støy » skjønt. Ta ikke Det IdentifyingNumber Er ProductCode (wmi særegenhet).

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

Hurtigstart Av Powershell: hold Windows-tasten, trykk R, skriv inn «powershell» og trykk Enter.

Bruk VBScript

Dette alternativet kan være tryggere Enn Powershell av grunner som er forklart i detalj nedenfor.

i hovedsak er det (mye) raskere og ikke i stand til å utløse msi selvreparasjon siden DET ikke går GJENNOM WMI (det får tilgang TIL MSI COM API direkte-ved blærende hastighet). Det er imidlertid mer involvert Enn Powershell-alternativet (flere linjer med kode).

du kan prøve Et VBScript for å få tilgang til informasjon via msi-automatiseringsgrensesnittet (kjernefunksjon I Windows – det er ikke relatert TIL WMI).

  • Kopier nedenstående skript og lim inn i en *.vbs fil på skrivebordet, og prøve å kjøre den ved å dobbeltklikke. Skrivebordet må være skrivbar for deg, eller du kan bruke en annen skrivbar plassering.
  • Dette er et eksempel På VBScript. Terseness har vært foretrukket over feilhåndtering og fullstendighet, men det bør gjøre jobben med minimal kompleksitet.
  • utdatafilen opprettes i mappen der du kjører skriptet fra (mappen må være skrivbar). Utdatafilen kalles msiinfo.csv.
  • Dobbeltklikk på filen for å åpne i et regnearkprogram, velg komma som skilletegn ved import-ELLER-bare åpne filen i Notisblokk eller en tekstvisningsprogram. Åpning i et regneark vil tillate avanserte sorteringsfunksjoner.
  • dette skriptet kan enkelt tilpasses for å vise en betydelig mengde ytterligere detaljer om msi-installasjonen.
'#### 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

Registeroppslag

du kan også finne produktkoden ved å lese registret fra denne basenøkkelen: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall.

Trykk F3-tasten og søk etter produktnavnet. Hvis det er et 32-biters installasjonsprogram på en 64-biters maskin, kan DET være under følgende nøkkel: HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall.

følgende registernøkler er de vanlige stedene der søk og finn Guidene FOR MSI-pakker:

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

Original Msi-Fil

Du kan finne Produktkoden i Egenskapstabellen til EN HVILKEN SOM HELST MSI-fil (og enhver annen eiendom også). GUID kan imidlertid tenkes (sjelden) overstyres av en transformering som brukes på installasjonstidspunktet, og dermed ikke samsvarer MED GUID-EN produktet er registrert under (tilnærming 1 og 2 ovenfor vil rapportere den virkelige produktkoden-som er registrert Med Windows-i slike sjeldne scenarier).

du trenger et verktøy for å vise MSI-filer. Se mot bunnen av følgende svar for en liste over gratis verktøy du kan laste ned (eller se hurtigalternativet nedenfor): Hvordan kan jeg sammenligne innholdet i to (eller flere) MSI-filer?

for enkelhets skyld og behov for fart, kan Du laste Ned SuperOrca uten forsinkelse og oppstyr fra denne direkte-last ned hotlink-verktøyet er godt nok til å få jobben gjort-installer, åpne MSI og gå rett til Eiendomstabellen og finn Produktkoden rad (vennligst alltid virussjekk en direkte-last ned hotlink-åpenbart – du kan bruke virustotal.com for å gjøre det – online skanning ved hjelp av dusinvis av anti-virus og malware suiter for å skanne det du laster opp).

En annen, den opprinnelige, tool Orca Er Microsofts eget verktøy, det er installert Med Visual Studio og Windows SDK. Prøv å søke Etter Orca-x86_en-us.msi, Under Programfiler (x86) og installer MSI hvis funnet.

Hent Produktkoder

Brann Opp Powershell (hold Nede Windows-tasten, trykk R, slipp Windows-tasten, skriv inn «powershell» og trykk OK) og kjør kommandoen nedenfor for å få en liste over installerte msi-pakkeproduktkoder sammen med den lokale hurtigbufferpakken og produktnavnet (maksimer PowerShell-vinduet for å unngå avkortede navn).

før du kjører denne kommandolinjen, vennligst les ansvarsfraskrivelsen nedenfor (ingenting farlig, bare noen potensielle ulemper). Hvis du prøver å avinstallere en pakke, er det en del nedenfor med noen eksempler på msiexec.exe kommandolinjer:

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

utgangen skal være lik denne:

Powershell-Sjekk og finn produktguiden for et installert msi-oppsett

Av en eller annen merkelig grunn refereres «Produktkode» til SOM «IdentifyingNumber» I WMI. Så med andre ord, i bildet over Identifikasjonennummer Er Produktkoden.

på grunn Av merkelig Microsoft-design, vil ETHVERT wmi-anrop Til Win32_Product (som PowerShell-kommandoen nedenfor) utløse en validering av pakken. Foruten å være ganske treg, kan dette i sjeldne tilfeller utløse EN msi selvreparasjon. Dette kan være en liten pakke eller noe stort Som Visual Studio. I de fleste tilfeller skjer dette ikke, men det er en risiko.

ikke kjør denne kommandoen rett før et viktig møte, det er aldri farlig (det er en skrivebeskyttet spørring), men det kan føre til en lang reparasjon i svært sjeldne tilfeller.

du kan også få utdata i listeform (i stedet for tabell):

get-wmiobject -class Win32_Product

i dette tilfellet er utgangen lik denne:

Powershell-Sjekk og finn produktguiden for et installert msi-oppsett

Hent Produktkoder Fra En Ekstern Datamaskin

i teorien bør du bare kunne angi et eksternt datamaskinnavn som en del av selve kommandoen. Her er den samme kommandoen som ovenfor satt opp til å kjøre på maskinen «RemoteMachine» (- Datamaskinnavn RemoteMachine delen lagt til):

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

Dette kan fungere hvis du kjører med domeneadministratorrettigheter på et riktig domene. I et arbeidsgruppemiljø (lite kontor / hjemmenettverk ) må du sannsynligvis legge til brukerlegitimasjon direkte TIL wmi-anropene for å få det til å fungere.

i TILLEGG påvirkes eksterne tilkoblinger I WMI av (minst) Windows-Brannmuren, dcom-innstillingene og Brukerkontokontroll (Uac) (pluss eventuelle andre ikke-Microsoft-faktorer, for eksempel flere fysiske eller virtuelle brannmurer, tredjeparts programvare brannmurer, sikkerhetsprogramvare av ulike slag, etc.). Om det vil fungere eller ikke, avhenger vanligvis av ditt nøyaktige oppsett.

Powershell

PowerShell krever AT. NET framework installeres, men På de fleste moderne Operativsystemer (Windows Server og Windows-plattformer Er Powershell allerede inkludert og tilgjengelig). Den faktiske PowerShell-applikasjonen selv kan også mangle fra maskinen selv OM. NET er installert. Endelig Kan PowerShell deaktiveres eller låses av ulike systempolicyer og privilegier.

hvis dette er tilfelle, kan du prøve noen andre måter å hente produktkoder på. Et alternativ Er VBScript – det er raskt og fleksibelt ( men kan også låses på enkelte maskiner, og skripting er alltid litt mer involvert enn å bruke verktøy).

La oss starte med et innebygd Windows WMI-verktøy, vanligvis brukt til testing AV wmi-komponenter og funksjoner: wbemtest.exe.

  • Start wbemtest.exe (Hold Nede Windows-tasten, trykk R, slipp Windows-tasten, skriv inn » wbemtest.exe » og trykk PÅ OK).
  • Klikk koble TIL OG DERETTER OK (navneområde standard til root\cimv2), og klikk» koble » igjen.
  • Klikk På «Query» og skriv inn denne wql-kommandoen( SQL-smaken): VELG IdentifyingNumber, Navn, Versjon Fra Win32_Product.
  • Klikk På «Bruk» (eller tilsvarende-verktøyet vil bli lokalisert).

Eksempel utgang skjermbilde er følgende. Ikke den fineste formateringen, men du kan få dataene du trenger. IdentifyingNumber ER MSI produktkoden:

Powershell-Sjekk og finn produktguiden til et installert msi-oppsett

Deretter kan du prøve et tilpasset, mer fullverdig WMI-verktøy som Wpiexplorer.exe.

  • Dette er ikke inkludert I Windows. Det er imidlertid et veldig godt verktøy.
  • Sjekk det ut på: https://github.com/vinaypamnani/wmie2/releases.
  • Start verktøyet, klikk Koble til, dobbeltklikk ROOT\CIMV2
  • fra «Query tab», skriv inn følgende spørring VELG IdentifyingNumber,Navn,Versjon Fra Win32_Product og trykk Kjør.

Få MSI Pakker GUID (Sammenligne ProductCode Og UpgradeCode)

Start PowerShell: hold Nede Windows og R-tasten sammen, slipp Windows-tasten, skriv inn «powershell»og trykk OK eller trykk Enter.

Kopier skriptet nedenfor i sin helhet, og høyreklikk bare inne I PowerShell-vinduet.

For Win32_Property filtrerer vi både rader og kolonner(UpgradeCode er bare en av mange radtyper). Vær forberedt på en langsom operasjon, WMI er veldig sakte å gjøre slike henter.

$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"

oppgraderingskoden er den unike GUIDEN for å identifisere en familie av et produkt. Det vil si at de samme produktene med forskjellige versjoner sannsynligvis har blitt sendt for noen få utgivelser. Disse produktene har ulike ProductCodes, men de er koblet sammen ved HJELP Av SAMME UpgradeCode.

for eksempel, forutsatt at vi skrev et produkt som heter «Happy MSI», og dette produktet har bare EN msi-pakke for distribusjon på klientsystemet.

den første utgivelsen av dette produktet er FAKTISK msi-pakken med navnet » version_1.msi», og den andre utgivelsen er » version_2.msi». Deretter må disse TO MSI ha samme UpgradeCode. Når brukere kjører » version_2.msi» på deres system vil windows installer bruke UpgradeCode til å avgjøre om tidligere versjoner av dette produktet allerede finnes på systemet.

Installer API «MsiEnumRelatedProducts ()» bruker UpgradeCode til å spørre alle produktene i familien.

Avinstaller MSI-Pakker

Hvis det du vil gjøre er å avinstallere msi-pakken, og du fant produktkoden (GUID) for, kan du gjøre dette på følgende måte ved hjelp av en hevet ledetekst (søk etter cmd.exe, høyreklikk og kjør som admin):

Alternativ 1: Grunnleggende, interaktiv avinstallere uten logging (rask og enkel):

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

Rask Parameter Forklaring:

  • /x = run uninstall sequence
  • {000000000-0000-0000-00000000000c} = Produktkode for produkt å avinstallere

du kan også aktivere (verbose) logging og kjøre i stille modus hvis du vil, fører oss til alternativ 2:

Alternativ 2: silent uninstall with verbose logging (bedre for batch-filer):

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

Rask Parameter Forklaring:

  • /X = kjør avinstaller sekvens
  • {000000000-0000-0000-0000-00000000000c} = Produktkode for produkt å avinstallere
  • / QN = Kjør helt stille
  • / L*V «C:\My.logg » = Detaljert logging på angitt bane
  • REBOOT=ReallySuppress = Unngå uventet, plutselig omstart

Leave a Reply

Din e-postadresse vil ikke bli publisert.