Powershell – Controllare e trovare il GUID del prodotto installato MSI di installazione
Per sbloccare totalmente a questa sezione è necessario effettuare il Log-in
Il codice del prodotto è il GUID univoco di identificazione di un’applicazione o di rilascio del prodotto; In altre parole, le diverse versioni e lingue di Prodotto deve avere diversi codici prodotto.
Inoltre, ProductCode può essere utilizzato per interrogare lo stato della funzione e lo stato del prodotto. Ad esempio, l’API di installazione “MsiQueryFeatureStateEx()” e “MsiQueryProductState ()”, ecc.
I seguenti quattro approcci possono fornirci diversi metodi per trovare e recuperare (anche da remoto) il GUID dei pacchetti MSI installati:
Utilizzare il Powershell “one-liner”
Qualsiasi auto-riparazione attivata da questa opzione dovrebbe generalmente essere possibile annullare. I controlli di integrità del pacchetto attivati aggiungono un po ‘ di “rumore” del registro eventi. Non prendere che IdentifyingNumber sia il ProductCode (peculiarità WMI).
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
Avvio rapido di Powershell: tenere premuto il tasto Windows, toccare R, digitare “powershell” e premere Invio.
Usa VBScript
Questa opzione potrebbe essere più sicura di Powershell per i motivi spiegati in dettaglio di seguito.
In sostanza è (molto) più veloce e non è in grado di innescare l’auto-riparazione MSI poiché non passa attraverso WMI (accede direttamente all’API MSI COM – a velocità di vesciche). Tuttavia, è più coinvolto dell’opzione Powershell (diverse righe di codice).
È possibile provare un VBScript per accedere alle informazioni tramite l’interfaccia di automazione MSI (caratteristica principale di Windows – non è correlato a WMI).
- Copia lo script sottostante e incollalo in un *.file vbs sul desktop, e provare a eseguirlo con un doppio clic. Il desktop deve essere scrivibile per voi, oppure è possibile utilizzare qualsiasi altra posizione scrivibile.
- Questo è un esempio di VBScript. La terseness è stata preferita alla gestione degli errori e alla completezza, ma dovrebbe svolgere il lavoro con una complessità minima.
- Il file di output viene creato nella cartella da cui si esegue lo script (la cartella deve essere scrivibile). Il file di output è chiamato msiinfo.csv.
- Fare doppio clic sul file da aprire in un’applicazione foglio di calcolo, selezionare virgola come delimitatore su import-O-basta aprire il file in Blocco note o qualsiasi visualizzatore di testo. L’apertura in un foglio di calcolo consentirà funzionalità avanzate di ordinamento.
- Questo script può essere facilmente adattato per mostrare una notevole quantità di ulteriori dettagli sull’installazione di 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
Ricerca del registro
È inoltre possibile trovare il codice prodotto sfogliando il registro di sistema da questa chiave di base: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall.
Premere il tasto F3 e cercare il nome del prodotto. Se si tratta di un programma di installazione a 32 bit su una macchina a 64 bit, potrebbe essere sotto la seguente chiave: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.
Le seguenti chiavi di registro sono le posizioni comuni in cui cercare e trovare i GUID dei pacchetti MSI:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
File MSI originale
È possibile trovare il codice Prodotto nella tabella delle proprietà di qualsiasi file MSI (e anche di qualsiasi altra proprietà). Tuttavia, il GUID potrebbe concettualmente (raramente) essere sovrascritto da una trasformazione applicata al momento dell’installazione e quindi non corrispondere al GUID in cui il prodotto è registrato (l’approccio 1 e 2 sopra riporterà il codice prodotto reale – registrato con Windows – in scenari così rari).
È necessario uno strumento per visualizzare i file MSI. Vedi in fondo alla seguente risposta per un elenco di strumenti gratuiti che puoi scaricare( o vedere l’opzione rapida sotto): Come posso confrontare il contenuto di due (o più) file MSI?
Per comodità e need for speed, è possibile scaricare SuperOrca senza ritardo e confusione da questo direct-download link – lo strumento è abbastanza buono per ottenere il lavoro fatto – install, open MSI e andare dritto per la tabella di Proprietà e trovare il ProductCode riga (si prega sempre di verificare la presenza di virus direct download link – ovviamente – è possibile utilizzare virustotal.com per farlo – scansione online utilizzando decine di anti-virus e malware, suite per eseguire la scansione di ciò che si carica).
Un altro, l’originale, strumento Orca è proprio strumento di Microsoft, è installato con Visual Studio e Windows SDK. Prova a cercare Orca-x86_it-us.msi, sotto Programmi (x86) e installare MSI se trovato.
Recupera i codici prodotto
Accendi Powershell (tieni premuto il tasto Windows, tocca R, rilascia il tasto Windows, digita “powershell” e premi OK) ed esegui il comando sottostante per ottenere un elenco dei codici prodotto dei pacchetti MSI installati insieme al percorso del pacchetto della cache locale e al nome del prodotto (massimizza la finestra di PowerShell per evitare nomi troncati).
Prima di eseguire questa riga di comando, leggere il disclaimer qui sotto (niente di pericoloso, solo alcuni potenziali fastidi). Se stai cercando di disinstallare un pacchetto, c’è una sezione qui sotto con alcuni esempi di msiexec.righe di comando exe:
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
L’output dovrebbe essere simile a questo:
Per qualche strana ragione il “ProductCode” viene indicato come “IdentifyingNumber” in WMI. Quindi, in altre parole, nella foto sopra l’IdentifyingNumber è il ProductCode.
A causa di uno strano design Microsoft, qualsiasi chiamata WMI a Win32_Product (come il comando PowerShell di seguito) attiverà una convalida della proprietà del pacchetto. Oltre ad essere piuttosto lento, questo può in rari casi innescare un’auto-riparazione MSI. Questo può essere un piccolo pacchetto o qualcosa di enorme – come Visual Studio. Nella maggior parte dei casi questo non accade, ma c’è un rischio.
Non eseguire questo comando prima di una riunione importante, non è mai pericoloso (è una query di sola lettura), ma potrebbe portare a una lunga riparazione in casi molto rari.
È anche possibile ottenere l’output in forma di elenco (invece di tabella):
get-wmiobject -class Win32_Product
In questo caso l’output è simile a questo:
Recuperare i Codici di Prodotto Da Un Computer Remoto
In teoria si dovrebbe solo essere in grado di specificare un nome del computer remoto come parte del comando stesso. Ecco lo stesso comando di cui sopra impostato per l’esecuzione sulla macchina ” RemoteMachine “(aggiunta la sezione-ComputerName RemoteMachine):
get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
Questo potrebbe funzionare se si esegue con i diritti di amministratore del dominio su un dominio corretto. In un ambiente di gruppo di lavoro (piccolo ufficio / rete domestica), probabilmente è necessario aggiungere le credenziali utente direttamente alle chiamate WMI per farlo funzionare.
Inoltre, le connessioni remote in WMI sono influenzate (almeno) dal Firewall di Windows, dalle impostazioni DCOM e dal Controllo account utente (UAC) (oltre a qualsiasi altro fattore non Microsoft, ad esempio firewall fisici o virtuali aggiuntivi, firewall software di terze parti, software di sicurezza di vario tipo, ecc.). Se funzionerà o meno dipende, di solito, dalla configurazione esatta.
Powershell
PowerShell richiede l’installazione di.NET framework, ma sulla maggior parte dei sistemi operativi moderni (piattaforme Windows Server e Windows, Powershell è già incluso e disponibile). L’applicazione PowerShell reale stessa può anche mancare dalla macchina anche se. NET è installato. Infine, PowerShell potrebbe essere disabilitato o bloccato da vari criteri e privilegi di sistema.
Se questo è il caso, puoi provare alcuni altri modi per recuperare i codici prodotto. Un’alternativa è VBScript-è veloce e flessibile (ma può anche essere bloccato su alcune macchine, e lo scripting è sempre un po ‘ più coinvolto rispetto all’utilizzo di strumenti).
Iniziamo con uno strumento WMI di Windows integrato, solitamente utilizzato per testare componenti e funzionalità WMI: wbemtest.exe.
- Avvia wbemtest.exe (Tenere premuto il tasto Windows, toccare R, rilasciare il tasto Windows, digitare ” wbemtest.exe ” e premere OK).
- Fare clic su connetti e quindi su OK (lo spazio dei nomi è predefinito su root\cimv2) e fare nuovamente clic su “connetti”.
- Fai clic su “Query” e digita questo comando WQL (SQL flavor): SELEZIONA IdentifyingNumber,Name,Version DA Win32_Product.
- Fai clic su ” Usa ” (o equivalente – lo strumento sarà localizzato).
Lo screenshot dell’output di esempio è il seguente. Non la formattazione più bella, ma puoi ottenere i dati di cui hai bisogno. IdentifyingNumber è il codice prodotto MSI:
Successivamente, puoi provare uno strumento WMI personalizzato e più completo come WMIExplorer.exe.
- Questo non è incluso in Windows. Si tratta di un ottimo strumento, tuttavia.
- Check it out a: https://github.com/vinaypamnani/wmie2/releases.
- Avviare lo strumento, fare clic su Connetti, fare doppio clic su ROOT\CIMV2
- Dalla “Scheda Query”, digitare la seguente query SELEZIONARE IdentifyingNumber, Name, Version FROM Win32_Product e premere Execute.
Ottieni pacchetti MSI GUID (confrontando ProductCode e UpgradeCode)
Avvia PowerShell: tieni premuto il tasto Windows e R insieme, rilascia il tasto Windows, digita “powershell” e premi OK o premi Invio.
Copia lo script qui sotto nella sua interezza, quindi fai clic con il pulsante destro del mouse all’interno della finestra di PowerShell.
Per Win32_Property filtriamo sia righe che colonne (UpgradeCode è solo uno dei tanti tipi di righe). Siate pronti per un’operazione lenta, WMI è molto lento facendo tali recuperi.
$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"
Il codice di aggiornamento è il GUID univoco per identificare una famiglia di un prodotto. Cioè, gli stessi prodotti con versioni diverse sono stati probabilmente spediti per alcune versioni. Questi prodotti hanno diversi ProductCodes, ma sono collegati tra loro utilizzando LO STESSO UpgradeCode.
Ad esempio, supponendo che abbiamo scritto un prodotto chiamato “Happy MSI” e questo prodotto ha solo un pacchetto MSI per la distribuzione sul sistema client.
La prima versione di questo prodotto è in realtà il pacchetto MSI con nome “version_1.msi”, e la seconda versione è ” version_2.MSI”. Quindi, questi due MSI devono avere lo stesso UpgradeCode. Quando gli utenti eseguono ” version_2.msi ” sul proprio sistema, Windows installer utilizzerà UpgradeCode per decidere se le versioni precedenti di questo prodotto sono già presenti sul sistema.
API di installazione “MsiEnumRelatedProducts ()” utilizza UpgradeCode per interrogare tutti i prodotti della famiglia.
Disinstalla pacchetti MSI
Se quello che vuoi fare è disinstallare il pacchetto MSI e hai trovato il codice prodotto (GUID) per, puoi farlo come segue usando un prompt dei comandi elevato (cerca cmd.exe, fare clic destro ed eseguire come admin):
Opzione 1: Di base, disinstallazione interattiva senza registrazione (semplice e veloce):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C}
Spiegazione rapida dei parametri:
- /X = eseguire la disinstallazione sequenza
- {00000000-0000-0000-0000-00000000000C} = codice Prodotto per prodotto per disinstallare
È anche possibile abilitare (verbose), la registrazione e l’esecuzione in modalità silenziosa se si vuole, che ci porta a opzione 2:
Opzione 2: silent disinstallare con registrazione dettagliata (meglio per i file batch):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress
Rapida Parametro Spiegazione:
- /X = eseguire la disinstallazione sequenza
- {00000000-0000-0000-0000-00000000000C} = codice Prodotto per prodotto per disinstallare
- /QN = in modo completamente automatico
- /L*V “C:\My.log ” = Registrazione dettagliata al percorso specificato
- REBOOT = ReallySuppress = Evita un riavvio improvviso e inaspettato