Powershell-Zkontrolujte a najděte GUID produktu nainstalovaného nastavení MSI

Chcete-li tuto sekci zcela odemknout, musíte se přihlásit

Kód produktu je jedinečný průvodce identifikací aplikace nebo vydání produktu; jinými slovy, různé verze a jazyky produktu musí mít různé kódy produktu.

produktový kód lze také použít k dotazování stavu funkce a stavu produktu. Například instalační API “ MsiQueryFeatureStateEx ()“ a“ MsiQueryProductState () “ atd.

následující čtyři přístupy nám mohou poskytnout několik metod k nalezení a načtení (také vzdáleně) GUID nainstalovaných balíčků MSI:

použijte Powershell „one-liner“

jakákoli vlastní oprava vyvolaná touto volbou by měla být obecně možná zrušit. Spuštěné kontroly integrity balíčku však přidávají nějaký protokol událostí „šum“. Neberte si, že IdentifyingNumber je produktový kód (zvláštnost WMI).

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

rychlý start Powershell: podržte klávesu Windows, klepněte na R, zadejte „powershell“ a stiskněte klávesu Enter.

použijte VBScript

tato volba může být bezpečnější než Powershell z důvodů podrobně vysvětlených níže.

v podstatě je (mnohem) rychlejší a není schopen spustit vlastní opravu MSI, protože neprochází WMI (přistupuje přímo k MSI COM API-rychlostí puchýřů). Je však více zapojena než možnost Powershell (několik řádků kódu).

můžete vyzkoušet VBScript pro přístup k informacím prostřednictvím rozhraní MSI automation (základní funkce systému Windows – nesouvisí s WMI).

  • zkopírujte níže uvedený skript a vložte do *.soubor vbs na ploše a zkuste jej spustit dvojitým kliknutím. Váš desktop musí být zapisovatelný pro vás, nebo můžete použít jiné zapisovatelné umístění.
  • Toto je ukázkový VBScript. Terseness byla upřednostňována před manipulací s chybami a úplností, ale měla by dělat práci s minimální složitostí.
  • výstupní soubor je vytvořen ve složce, ze které spustíte skript (složka musí být zapisovatelná). Výstupní soubor se nazývá msiinfo.csv.
  • Poklepejte na soubor, který chcete otevřít v tabulkové aplikaci, vyberte čárku jako oddělovač při importu-nebo-stačí otevřít soubor v Poznámkovém bloku nebo v libovolném prohlížeči textu. Otevření v tabulce umožní pokročilé funkce třídění.
  • tento skript lze snadno upravit tak, aby zobrazoval značné množství dalších podrobností o instalaci 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

vyhledávání registru

kód produktu můžete také najít prostudováním registru z tohoto základního klíče: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \ CurrentVersion \ Uninstall.

stiskněte klávesu F3 a vyhledejte název produktu. Pokud se jedná o 32bitový instalační program na 64bitovém počítači, může být pod následujícím klíčem: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall.

následující klíče registru jsou běžná umístění, ve kterých vyhledávání a hledání GUID balíčků MSI:

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

původní soubor MSI

Kód produktu najdete v tabulce vlastností libovolného souboru MSI (a jakékoli jiné vlastnosti). GUID by však mohl být (zřídka) přepsán transformací aplikovanou v době instalace, a proto neodpovídá GUID, pod kterým je produkt registrován (přístup 1 a 2 výše uvede skutečný kód produktu-který je registrován v systému Windows – v takových vzácných scénářích).

potřebujete nástroj pro zobrazení souborů MSI. V dolní části následující odpovědi najdete seznam bezplatných nástrojů, které si můžete stáhnout (nebo viz rychlá volba níže): Jak mohu porovnat obsah dvou (nebo více) souborů MSI?

pro větší pohodlí a potřebu rychlosti, Můžete si stáhnout SuperOrca bez prodlení a povyk z tohoto direct-download hotlink-nástroj je dost dobrý, aby svou práci – instalace, otevřete MSI a jít rovnou do tabulky vlastností a najít ProductCode řádek (prosím, vždy virus zkontrolovat přímý-download hotlink-samozřejmě – můžete použít virustotal.com Chcete – li tak učinit-online skenování využívající desítky antivirových a malwarových sad pro skenování toho, co nahrajete).

další, původní, nástroj Orca je vlastní nástroj společnosti Microsoft, je nainstalován s Visual Studio a Windows SDK. Zkuste hledat Orca-x86_en-us.msi, v části Program Files (x86) a nainstalujte MSI, pokud je nalezen.

načíst Kódy produktů

spusťte Powershell (podržte klávesu Windows, klepněte na R, uvolněte klávesu Windows, zadejte „powershell“ a stiskněte OK) a spusťte příkaz níže, abyste získali seznam nainstalovaných kódů produktů MSI package spolu s místní cestou k balíčku mezipaměti a názvem produktu (maximalizujte okno PowerShell, abyste se vyhnuli zkráceným jménům).

před spuštěním tohoto příkazového řádku si prosím přečtěte níže uvedené prohlášení (nic nebezpečného, jen některé potenciální obtíže). Pokud se pokoušíte odinstalovat balíček, je níže uvedená část s ukázkovým msiexec.příkazové řádky exe:

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

výstup by měl být podobný tomuto:

Powershell-Zkontrolujte a najděte GUID produktu nainstalovaného nastavení MSI

z nějakého zvláštního důvodu je “ ProductCode „v WMI označován jako“ IdentifyingNumber“. Jinými slovy, na obrázku nad Identifikacíčíslo je produktový kód.

vzhledem k podivnému designu společnosti Microsoft spustí jakékoli volání WMI na Win32_Product (jako příkaz PowerShell níže) ověření majetku balíčku. Kromě toho, že je poměrně pomalý, může to ve vzácných případech vyvolat opravu MSI. Může to být malý balíček nebo něco obrovského – jako Visual Studio. Ve většině případů se to nestane, ale existuje riziko.

nespouštějte tento příkaz těsně před důležitou schůzkou, není to nikdy nebezpečné (jedná se o dotaz pouze pro čtení), ale ve velmi vzácných případech může vést k dlouhé opravě.

výstup můžete získat také ve formě seznamu (místo tabulky):

get-wmiobject -class Win32_Product

v tomto případě je výstup podobný tomuto:

Powershell-Zkontrolujte a najděte GUID produktu nainstalovaného nastavení MSI

načtěte Kódy produktů ze vzdáleného počítače

teoreticky byste měli být schopni zadat název vzdáleného počítače jako součást samotného příkazu. Zde je stejný příkaz jako výše nastavený pro spuštění na počítači „RemoteMachine“ (přidána část ComputerName RemoteMachine):

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

to může fungovat, pokud používáte práva správce domény na správné doméně. V prostředí pracovní skupiny (malá kancelářská / domácí síť) budete pravděpodobně muset přidat přihlašovací údaje uživatele přímo do hovorů WMI, aby to fungovalo.

vzdálená připojení ve službě WMI jsou navíc ovlivněna (alespoň) bránou Firewall systému Windows, nastavením DCOM a řízením uživatelských účtů (UAC) (plus další faktory mimo společnost Microsoft, například další fyzické nebo virtuální brány firewall, brány firewall třetích stran, bezpečnostní software různých druhů atd.).). Zda to bude fungovat nebo ne, obvykle závisí na vašem přesném nastavení.

Powershell

PowerShell vyžaduje instalaci rozhraní. NET framework, ale na většině moderních operačních systémů (platformy Windows Server a Windows jsou Powershell již zahrnuty a dostupné). Samotná aplikace PowerShell může v počítači také chybět, i když je nainstalován. Net. Nakonec může být PowerShell deaktivován nebo uzamčen různými systémovými zásadami a oprávněními.

Pokud tomu tak je, můžete zkusit několik dalších způsobů, jak načíst Kódy produktů. Alternativou je VBScript – je rychlý a flexibilní (ale může být také uzamčen na určitých strojích a skriptování je vždy o něco více zapojeno než používání nástrojů).

začněme s vestavěným nástrojem Windows WMI, který se obvykle používá pro testování komponent a funkcí WMI: wbemtest. exe.

  • spusťte wbemtest.exe (podržte klávesu Windows, klepněte na R, uvolněte klávesu Windows, zadejte „wbemtest.exe “ a stiskněte OK).
  • klikněte na Připojit a poté na OK (namespace výchozí root\cimv2) a znovu klikněte na „Připojit“.
  • klikněte na „dotaz“ a zadejte tento příkaz WQL (SQL flavor): vyberte IdentifyingNumber,Name, Version FROM Win32_Product.
  • klikněte na „Použít“ (nebo ekvivalent-nástroj bude lokalizován).

ukázkový výstupní Snímek obrazovky je následující. Není to nejhezčí formátování, ale můžete získat data, která potřebujete. IdentifyingNumber je Kód produktu MSI:

Powershell-Zkontrolujte a najděte GUID produktu nainstalovaného nastavení MSI

dále můžete vyzkoušet vlastní, plnohodnotnější nástroj WMI, jako je WMIExplorer.exe.

  • Toto není součástí systému Windows. Je to však velmi dobrý nástroj.
  • zkontrolujte to na adrese: https://github.com/vinaypamnani/wmie2/releases.
  • spusťte nástroj, klepněte na tlačítko Připojit, poklepejte na ROOT\CIMV2
  • na kartě „dotaz“ zadejte následující dotaz vyberte Identifikacičíslo,jméno, verzi z Win32_Product a stiskněte Execute.

Get MSI balíčky GUID (porovnání ProductCode a UpgradeCode)

Launch PowerShell: podržte stisknuté klávesy Windows a R společně, uvolněte klávesu Windows, zadejte „powershell“ a stiskněte OK nebo stiskněte klávesu Enter.

zkopírujte níže uvedený skript v plném rozsahu a poté klikněte pravým tlačítkem myši uvnitř okna PowerShell.

pro Win32_Property filtrujeme řádky i sloupce (UpgradeCode je jen jedním z mnoha typů řádků). Buďte připraveni na pomalý provoz, WMI je velmi pomalý dělá takové načte.

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

aktualizační kód je unikátní GUID identifikace rodiny produktu. To znamená, že stejné produkty s různými verzemi byly pravděpodobně dodány na několik vydání. Tyto produkty mají různé ProductCodes, ale jsou propojeny pomocí stejného UpgradeCode.

například za předpokladu, že jsme napsali produkt s názvem „Happy MSI“ a tento produkt má pouze jeden balíček MSI pro nasazení v klientském systému.

první vydání tohoto produktu je ve skutečnosti balíček MSI s názvem “ version_1.msi „a druhé vydání je“ version_2.msi“. Pak tyto dva MSI musí mít stejný Upgradekód. Když uživatelé spustí “ version_2.msi “ v jejich systému použije instalační program windows UpgradeCode k rozhodnutí, zda jsou v systému již přítomny předchozí verze tohoto produktu.

Installer API „MsiEnumRelatedProducts ()“ používá UpgradeCode dotazovat všechny rodinné produkty.

odinstalujte balíčky MSI

pokud chcete odinstalovat balíček MSI a našli jste kód produktu (GUID), můžete to provést následujícím způsobem pomocí zvýšeného příkazového řádku (vyhledejte cmd.exe, klikněte pravým tlačítkem myši a spusťte jako admin):

Možnost 1: Základní, interaktivní odinstalace bez protokolování (rychlé a snadné):

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

rychlé vysvětlení parametrů:

  • /X = spustit sekvenci odinstalace
  • {0000000-0000-0000-0000-0000000000C} = kód produktu pro odinstalaci produktu

můžete také povolit (podrobnou) protokolování a spustit v tichém režimu, pokud chcete, což nás vede k možnosti 2:

volba 2: tichá odinstalace s podrobným protokolováním (lepší pro dávkové soubory):

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

rychlé vysvětlení parametrů:

  • /X = spustit sekvenci odinstalace
  • {0000000-0000-0000-0000-0000000000C} = kód produktu pro odinstalování produktu
  • /QN = spustit zcela tiše
  • /L*V „C:\My.log“ = Podrobná logování na zadané cestě
  • REBOOT=ReallySuppress = vyhnout se neočekávanému, náhlému restartu

Leave a Reply

Vaše e-mailová adresa nebude zveřejněna.