Powershell-Verificați și găsiți GUID-ul produsului unei configurații MSI instalate

pentru a debloca complet această secțiune, trebuie să vă conectați

codul produsului este ghidul unic de identificare a unei aplicații sau a unei versiuni de produs; cu alte cuvinte, diferite versiuni și limbi ale produsului trebuie să aibă coduri de produs diferite.

de asemenea, ProductCode poate fi folosit pentru a interoga stat caracteristică, și starea produsului. De exemplu, API-ul de instalare „MsiQueryFeatureStateEx()” și „MsiQueryProductState ()” etc.

următoarele patru abordări ne pot oferi mai multe metode pentru a găsi și prelua (de asemenea, de la distanță) GUID-ul pachetelor MSI instalate:

utilizați Powershell „one-liner”

orice auto-reparare declanșată de această opțiune ar trebui să fie, în general, posibilă anularea. Verificările de integritate pachet declanșat adaugă unele jurnal de evenimente” zgomot”, deși. Nu luați acest IdentifyingNumber este ProductCode (WMI particularitate).

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

pornire rapidă a Powershell: țineți tasta Windows, atingeți R, tastați „powershell” și apăsați Enter.

utilizați VBScript

această opțiune poate fi mai sigură decât Powershell din motive explicate în detaliu mai jos.

în esență, este (mult) mai rapid și nu este capabil să declanșeze auto-repararea MSI, deoarece nu trece prin WMI (accesează direct API – ul MSI COM-la viteză veziculară). Cu toate acestea, este mai implicat decât opțiunea Powershell (mai multe linii de cod).

puteți încerca un VBScript pentru a accesa informații prin interfața de automatizare MSI (caracteristica de bază a Windows – nu are legătură cu WMI).

  • copiați scriptul de mai jos și lipiți într-un *.VBS fișier de pe desktop, și să încerce să-l rulați prin dublu clic. Desktopul dvs. trebuie să poată fi scris pentru dvs. sau puteți utiliza orice altă locație care poate fi scrisă.
  • acesta este un eșantion VBScript. Concernitatea a fost preferată față de manipularea erorilor și completitudinea, dar ar trebui să facă treaba cu o complexitate minimă.
  • fișierul de ieșire este creat în folderul din care rulați scriptul (folderul trebuie să poată fi scris). Fișierul de ieșire se numește msiinfo.csv.
  • faceți dublu clic pe fișier pentru a deschide într – o aplicație de calcul tabelar, selectați virgulă ca delimitator la import – sau-doar deschideți fișierul în Notepad sau în orice vizualizator de text. Deschiderea într-o foaie de calcul va permite funcții avansate de sortare.
  • acest script poate fi ușor adaptat pentru a afișa o cantitate semnificativă de detalii suplimentare despre instalarea MSI.

'#### 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

de asemenea, puteți găsi codul produsului examinând Registrul din această cheie de bază: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall.

apăsați tasta F3 și căutați Numele produsului. Dacă este un instalator pe 32 de biți pe o mașină pe 64 de biți, ar putea fi sub următoarea cheie: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.

următoarele chei de registry sunt locațiile comune în care căutați și găsiți GUID-urile pachetelor MSI:

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

fișier original MSI

puteți găsi codul produsului în tabelul de proprietăți al oricărui fișier MSI (și al oricărei alte proprietăți). Cu toate acestea, GUID – ul ar putea fi anulat (rareori) de o transformare aplicată la momentul instalării și, prin urmare, nu se potrivește cu GUID – ul sub care este înregistrat produsul (abordarea 1 și 2 de mai sus vor raporta codul real al produsului-care este înregistrat cu Windows-în astfel de scenarii rare).

aveți nevoie de un instrument pentru a vizualiza fișierele MSI. Vedeți spre partea de jos a următorului răspuns pentru o listă de instrumente gratuite pe care le puteți descărca (sau consultați opțiunea rapidă de mai jos): Cum pot compara conținutul a două (sau mai multe) fișiere MSI?

pentru comoditate și need for speed, puteți descărca SuperOrca fără întârziere și agitație din acest Direct-descărcați hotlink – instrumentul este suficient de bun pentru a face treaba – instalați, deschideți MSI și mergeți direct la tabelul de proprietăți și găsiți rândul ProductCode (vă rugăm să verificați întotdeauna virușii direct-descărcați hotlink – evident – puteți utiliza această aplicație virustotal.com pentru a face acest lucru-scanare online folosind zeci de anti-virus și malware Suite pentru a scana ceea ce încărcați).

un alt instrument original, Orca este instrumentul Microsoft, este instalat cu Visual Studio și Windows SDK. Încercați să căutați Orca-x86_en-us.msi, sub Program Files (x86) și instalați MSI dacă este găsit.

regăsiți codurile produsului

porniți Powershell (țineți apăsată tasta Windows, atingeți r, eliberați tasta Windows, tastați „powershell” și apăsați OK) și executați comanda de mai jos pentru a obține o listă de coduri de produse instalate pentru pachetul MSI împreună cu calea pachetului cache local și Numele produsului (maximizați fereastra PowerShell pentru a evita numele trunchiate).

înainte de a rula această linie de comandă, vă rugăm să citiți disclaimer de mai jos (nimic periculos, doar câteva neplăceri potențiale). Dacă încercați să dezinstalați un pachet există o secțiune de mai jos, cu unele msiexec eșantion.linii de comandă exe:

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

rezultatul ar trebui să fie similar cu acesta:

Powershell-Verificați și găsiți GUID-ul produsului unei configurații MSI instalate

dintr-un motiv ciudat, „Cod produs” este denumit „IdentifyingNumber” în WMI. Deci, cu alte cuvinte, în imaginea de deasupra Identificăriinumărul este codul produsului.

datorită designului Microsoft ciudat, orice apel WMI către Win32_Product (cum ar fi comanda PowerShell de mai jos) va declanșa o validare a pachetului. Pe lângă faptul că este destul de lent, acest lucru poate declanșa, în cazuri rare, o auto-reparare MSI. Acesta poate fi un pachet mic sau ceva imens – cum ar fi Visual Studio. În cele mai multe cazuri, acest lucru nu se întâmplă, dar există un risc.

nu rulați această comandă chiar înainte de o întâlnire importantă, nu este niciodată periculoasă (este o interogare numai în citire), dar ar putea duce la o reparație lungă în cazuri foarte rare.

puteți obține, de asemenea, de ieșire în formă de listă (în loc de tabel):

get-wmiobject -class Win32_Product

în acest caz, ieșirea este similară cu aceasta:

Powershell-Verificați și găsiți GUID-ul produsului unei configurații MSI instalate

preluați codurile produsului de pe un Computer la distanță

în teorie, ar trebui să puteți specifica doar un nume de computer la distanță ca parte a comenzii în sine. Aici este aceeași comandă ca mai sus configurat pentru a rula pe mașină ” RemoteMachine „(- ComputerName secțiunea RemoteMachine adăugat):

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

acest lucru ar putea funcționa dacă executați cu drepturi de administrator de domeniu pe un domeniu propriu. Într-un mediu de grup de lucru (birou mic / rețea de domiciliu), probabil că trebuie să adăugați acreditări de utilizator direct la apelurile WMI pentru a face să funcționeze.

în plus, conexiunile la distanță în WMI sunt afectate de (cel puțin) Paravanul de protecție Windows, setările DCOM și controlul contului de utilizator (UAC) (plus orice factori suplimentari non-Microsoft, de exemplu firewall-uri fizice sau virtuale suplimentare, firewall-uri software terță parte, software de securitate de diferite tipuri etc.). Dacă va funcționa sau nu depinde, de obicei, de configurarea exactă.

Powershell

PowerShell necesită instalarea.NET framework, dar pe majoritatea sistemelor de operare moderne (Windows Server și platformele Windows, Powershell este deja inclus și disponibil). Aplicația PowerShell în sine poate lipsi și din mașină, chiar dacă.net este instalat. În cele din urmă, PowerShell ar putea fi dezactivat sau blocat de diverse politici și privilegii de sistem.

dacă acesta este cazul, puteți încerca alte câteva modalități de a prelua codurile de produs. O alternativă este VBScript-este rapid și flexibil (dar poate fi blocat și pe anumite mașini, iar scriptarea este întotdeauna puțin mai implicată decât utilizarea instrumentelor).

să începem cu un instrument Windows WMI încorporat, utilizat de obicei pentru testarea componentelor și funcționalităților WMI: wbemtest.exe.

  • lansarea Wbemtest.exe (țineți apăsată tasta Windows, atingeți R, eliberați tasta Windows, tastați „wbemtest.exe ” și apăsați OK).
  • Faceți clic pe Conectare și apoi pe OK (spațiul de nume implicit este root\cimv2) și faceți clic din nou pe „Conectare”.
  • Faceți clic pe „interogare” și tastați această comandă WQL (SQL flavor): selectați IdentifyingNumber,Nume,versiune din Win32_Product.
  • Faceți clic pe „Utilizați” (sau echivalent – instrumentul va fi localizat).

exemplu de ieșire screenshot este următoarea. Nu este cea mai frumoasă formatare, dar puteți obține datele de care aveți nevoie. IdentifyingNumber este codul produsului MSI:

Powershell-Verificați și găsiți GUID-ul produsului unei configurații MSI instalate

apoi, puteți încerca un instrument WMI personalizat, mai complet, cum ar fi WMIExplorer.exe.

  • acest lucru nu este inclus în Windows. Cu toate acestea, este un instrument foarte bun.
  • verificați-l la: https://github.com/vinaypamnani/wmie2/releases.
  • lansați instrumentul, Faceți clic pe Conectare, faceți dublu clic pe ROOT\CIMV2
  • din „fila interogare”, tastați următoarea interogare selectați IdentifyingNumber,Nume,versiune din Win32_Product și apăsați Execute.

ia pachete MSI GUID(Compararea ProductCode și UpgradeCode)

lansarea PowerShell: țineți apăsată tasta Windows și R împreună, eliberați tasta Windows, tastați „powershell” și apăsați OK sau apăsați Enter.

copiați scriptul de mai jos în întregime, apoi faceți clic dreapta în fereastra PowerShell.

pentru Win32_Property filtrăm atât rânduri, cât și coloane (UpgradeCode este doar unul dintre numeroasele tipuri de rânduri). Fii pregătit pentru o operație lentă, WMI este foarte lent face astfel de preia.

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

codul de upgrade este GUID-ul unic de identificare a unei familii a unui produs. Adică, aceleași produse cu versiuni diferite au fost probabil expediate pentru câteva versiuni. Aceste produse au diferite ProductCodes, dar ele sunt legate între ele prin utilizarea același UpgradeCode.

de exemplu, presupunând că am scris un produs numit „MSI fericit” și acest produs are doar un singur pachet MSI pentru implementare pe sistemul client.

prima versiune a acestui produs este de fapt pachetul MSI cu numele „version_1.msi”, iar a doua versiune este ” version_2.msi”. Apoi, aceste două MSI trebuie să aibă același UpgradeCode. Când utilizatorii rulează ” version_2.msi ” pe sistemul lor, programul de instalare windows va utiliza UpgradeCode pentru a decide dacă versiunile anterioare ale acestui produs sunt deja prezente în sistem.

Installer API „MsiEnumRelatedProducts()” utilizează UpgradeCode pentru a interoga toate produsele de familie.

dezinstalați pachetele MSI

dacă ceea ce doriți să faceți este să dezinstalați pachetul MSI și ați găsit codul produsului (GUID) pentru, puteți face acest lucru după cum urmează folosind un prompt de comandă ridicat (căutați cmd.exe, faceți clic dreapta și rulați ca admin):

opțiunea 1: dezinstalare de bază, interactivă fără înregistrare (rapidă și ușoară):

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

explicație rapidă a parametrilor:

  • /X = run uninstall sequence
  • {00000000-0000-0000-0000-0000-00000000000c} = Cod produs pentru produs pentru a dezinstala

de asemenea, puteți activa (verbose) logare și a alerga în modul silențios, dacă doriți să, ceea ce ne duce la opțiunea 2:

Opțiunea 2: dezinstalare silent cu logare verbose (mai bine pentru fișierele batch):

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

explicație rapidă a parametrilor:

  • /X = rulează secvența de dezinstalare
  • {00000000-0000-0000-0000-00000000000c} = Cod produs pentru dezinstalarea produsului
  • /QN = rulează complet silențios
  • /L*V „C:\My.log ” = logare detaliată la calea specificată
  • REBOOT = ReallySuppress = evitați repornirea neașteptată și bruscă

Leave a Reply

Adresa ta de email nu va fi publicată.