Powershell-Sprawdź i znajdź identyfikator GUID produktu zainstalowanej konfiguracji MSI
aby całkowicie odblokować tę sekcję, musisz się zalogować
Kod produktu jest unikalnym identyfikatorem GUID identyfikującym aplikację lub wydanie produktu; innymi słowy, różne wersje i języki produktu muszą mieć różne kody produktów.
również ProductCode może być używany do zapytania stanu funkcji i stanu produktu. Na przykład, API instalatora „msiqueryfeaturestateex ()” i ” MsiQueryProductState ()”, itd.
następujące cztery metody mogą dać nam kilka metod wyszukiwania i pobierania (również zdalnie) identyfikatora GUID zainstalowanych pakietów MSI:
użyj Powershell „one-liner”
każda samo-naprawa wywołana tą opcją powinna być ogólnie możliwa do anulowania. Wywołane sprawdzanie integralności pakietu powoduje jednak dodanie „szumu” dziennika zdarzeń. Nie bierz tego, że Identifiyingnumber to ProductCode (osobliwość WMI).
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
Szybki start Powershell: przytrzymaj klawisz Windows, dotknij R, wpisz „powershell” i naciśnij klawisz Enter.
użyj VBScript
ta opcja może być bezpieczniejsza niż Powershell z powodów opisanych szczegółowo poniżej.
w istocie jest (o wiele) szybszy i nie jest w stanie uruchomić samonaprawy MSI, ponieważ nie przechodzi przez WMI (uzyskuje dostęp do interfejsu API MSI COM bezpośrednio-z błyskawiczną prędkością). Jednak jest to bardziej zaangażowane niż opcja Powershell (kilka linii kodu).
możesz wypróbować VBScript, aby uzyskać dostęp do informacji poprzez interfejs MSI automation (podstawowa funkcja Windows – nie jest związana z WMI).
- skopiuj poniższy skrypt i wklej do *.plik vbs na pulpicie i spróbuj go uruchomić, klikając dwukrotnie. Pulpit musi być zapisywalny dla Ciebie, lub można użyć dowolnego innego zapisu lokalizacji.
- to jest przykładowy VBScript. Terseness był preferowany nad obsługi błędów i kompletności, ale powinien wykonać zadanie z minimalną złożonością.
- plik wyjściowy jest tworzony w folderze, z którego uruchamiasz skrypt (folder musi być zapisywalny). Plik wyjściowy nazywa się msiinfo.csv.
- Kliknij dwukrotnie plik, aby otworzyć w aplikacji arkusza kalkulacyjnego, wybierz przecinek jako ogranicznik podczas importu – lub po prostu otwórz plik w notatniku lub dowolnej przeglądarce tekstowej. Otwarcie w arkuszu kalkulacyjnym pozwoli na zaawansowane funkcje sortowania.
- ten skrypt można łatwo dostosować, aby pokazać znaczną ilość dalszych szczegółów na temat instalacji 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
Wyszukiwanie rejestru
Kod produktu można również znaleźć, przeglądając rejestr z tego klucza podstawowego: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall.
naciśnij klawisz F3 i wyszukaj nazwę produktu. Jeśli jest to 32-bitowy Instalator na 64-bitowej maszynie, może znajdować się pod następującym kluczem: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.
następujące klucze rejestru są powszechnymi lokalizacjami, w których można wyszukiwać i znajdować identyfikatory GUID pakietów MSI:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
oryginalny plik MSI
Kod produktu można znaleźć w tabeli właściwości dowolnego pliku MSI (i każdej innej właściwości). Jednak identyfikator GUID może być (rzadko) nadpisany przez transformację zastosowaną w czasie instalacji, a zatem nie pasuje do identyfikatora GUID, pod którym zarejestrowany jest produkt(podejście 1 i 2 powyżej zgłasza prawdziwy kod produktu-który jest zarejestrowany w systemie Windows-w tak rzadkich scenariuszach).
potrzebujesz narzędzia do przeglądania plików MSI. Poniżej znajduje się lista bezpłatnych narzędzi, które można pobrać( lub szybka opcja poniżej): Jak mogę porównać zawartość dwóch (lub więcej) plików MSI?
dla wygody i potrzeby szybkości możesz pobrać Superorcę bez opóźnień i zamieszania z tego bezpośredniego łącza do pobrania-narzędzie jest wystarczająco dobre, aby wykonać zadanie – zainstaluj, otwórz MSI i przejdź bezpośrednio do tabeli właściwości i znajdź wiersz kodu produktu (zawsze Sprawdź bezpośrednie łącze do pobrania-oczywiście-możesz użyć virustotal.com aby to zrobić – skanowanie online z wykorzystaniem dziesiątek pakietów antywirusowych i złośliwego oprogramowania do skanowania tego, co przesyłasz).
inny, oryginalny, narzędzie Orca jest własnym narzędziem Microsoftu, jest instalowany z Visual Studio i Windows SDK. Spróbuj wyszukać Orca-x86_pl-us.msi, pod Program Files (x86) i zainstalować MSI, jeśli znaleziono.
Pobierz kody produktów
Uruchom Powershell (przytrzymaj klawisz Windows, dotknij R, zwolnij klawisz Windows, wpisz „powershell” i naciśnij OK) i uruchom poniższe polecenie, aby uzyskać listę zainstalowanych kodów produktów pakietu MSI wraz z lokalną ścieżką pakietu pamięci podręcznej i nazwą produktu (zmaksymalizuj okno PowerShell, aby uniknąć obciętych nazw).
przed uruchomieniem tego wiersza poleceń zapoznaj się z poniższym oświadczeniem (nic niebezpiecznego, tylko niektóre potencjalne uciążliwości). Jeśli próbujesz odinstalować pakiet, poniżej znajduje się sekcja z przykładowym msiexec.linie poleceń exe:
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
wyjście powinno być podobne do tego:
z jakiegoś dziwnego powodu „ProductCode” jest określany jako „IdentifyingNumber” w WMI. Innymi słowy, na obrazku powyżej Identyfikującymumber jest kod produktu.
z powodu dziwnego projektu Microsoftu każde wywołanie WMI do Win32_Product (takie jak polecenie PowerShell poniżej) uruchomi walidację pakietu. Poza tym, że jest to dość powolne, w rzadkich przypadkach może to spowodować samodzielną naprawę MSI. Może to być mały pakiet lub coś ogromnego – jak Visual Studio. W większości przypadków tak się nie dzieje, ale istnieje ryzyko.
nie uruchamiaj tego polecenia bezpośrednio przed ważnym spotkaniem, nigdy nie jest to niebezpieczne (jest to zapytanie tylko do odczytu), ale w bardzo rzadkich przypadkach może prowadzić do długiej naprawy.
możesz również uzyskać wynik w postaci listy (zamiast tabeli):
get-wmiobject -class Win32_Product
w tym przypadku wyjście jest podobne do tego:
Pobierz kody produktów ze zdalnego komputera
teoretycznie powinieneś być w stanie określić nazwę komputera zdalnego jako część samego polecenia. Oto to samo polecenie jak powyżej ustawione do uruchomienia na maszynie „RemoteMachine” (dodana sekcja-ComputerName RemoteMachine):
get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
może to działać, jeśli korzystasz z praw administratora domeny na odpowiedniej domenie. W środowisku grupy roboczej (mała sieć biurowa / domowa) prawdopodobnie musisz dodać poświadczenia użytkownika bezpośrednio do połączeń WMI, aby to działało.
ponadto na połączenia zdalne w WMI wpływa (co najmniej) Zapora systemu Windows, Ustawienia DCOM i Kontrola konta użytkownika (UAC) (plus wszelkie dodatkowe czynniki inne niż Microsoft, na przykład dodatkowe zapory fizyczne lub wirtualne, zapory oprogramowania innych firm, różnego rodzaju oprogramowanie zabezpieczające itp.). To, czy zadziała, czy nie, zależy zwykle od Twojej dokładnej konfiguracji.
Powershell
PowerShell wymaga zainstalowania. NET framework, ale na większości nowoczesnych systemów operacyjnych (Windows Server i platformy Windows, Powershell jest już dołączony i dostępny). Sama aplikacja PowerShell może również zniknąć z komputera, nawet jeśli. NET jest zainstalowany. Wreszcie, PowerShell może zostać wyłączony lub zablokowany przez różne zasady systemowe i przywileje.
jeśli tak jest, Możesz spróbować kilku innych sposobów odzyskania kodów produktów. Alternatywą jest VBScript – jest szybki i elastyczny (ale może być również zablokowany na niektórych maszynach, a skrypty są zawsze trochę bardziej zaangażowane niż użycie narzędzi).
zacznijmy od wbudowanego narzędzia Windows WMI, zwykle używanego do testowania komponentów i funkcjonalności WMI: wbemtest. exe.
- Uruchom wbemtest.exe (przytrzymaj klawisz Windows, dotknij R, zwolnij klawisz Windows, wpisz ” wbemtest.exe ” i naciśnij OK).
- kliknij Połącz, a następnie OK (przestrzeń nazw domyślnie root\cimv2) i kliknij ponownie „połącz”.
- Kliknij „Zapytanie” i wpisz w poleceniu WQL (SQL): wybierz IdentifyingNumber,Name, Version FROM Win32_Product.
- kliknij „Użyj” (lub odpowiednik – narzędzie zostanie zlokalizowane).
przykładowy zrzut ekranu jest następujący. Nie jest to najładniejsze formatowanie, ale możesz uzyskać potrzebne dane. IdentifyingNumber to kod produktu MSI:
następnie możesz wypróbować niestandardowe, bardziej w pełni funkcjonalne narzędzie WMI, takie jak WMIExplorer.exe.
- to nie jest zawarte w systemie Windows. Jest to jednak bardzo dobre narzędzie.
- Zobacz na stronie: https://github.com/vinaypamnani/wmie2/releases
- uruchom narzędzie, kliknij Połącz, kliknij dwukrotnie ROOT\cimv2
- z „zakładki zapytania”, wpisz następujące zapytanie wybierz IdentifyingNumber, Name, Version FROM Win32_Product i naciśnij Execute.
Pobierz GUID pakietów MSI (porównując Kod produktu i Kod aktualizacji)
Uruchom PowerShell: przytrzymaj klawisze Windows i R razem, zwolnij klawisz Windows, wpisz „powershell” i naciśnij OK lub naciśnij Enter.
skopiuj poniższy skrypt w całości, a następnie kliknij prawym przyciskiem myszy w oknie PowerShell.
dla Win32_Property filtrujemy zarówno wiersze, jak i kolumny (UpgradeCode jest tylko jednym z wielu typów wierszy). Bądź przygotowany na powolną operację, WMI bardzo wolno robi takie pobieranie.
$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"
kod aktualizacji jest unikalnym identyfikatorem GUID identyfikującym rodzinę produktu. Oznacza to, że te same produkty z różnymi wersjami prawdopodobnie zostały wysłane na kilka wydań. Produkty te mają różne kody produktów, ale są połączone ze sobą za pomocą tego samego kodu aktualizacji.
na przykład, zakładając, że napisaliśmy produkt o nazwie „Happy MSI” i ten produkt ma tylko jeden pakiet MSI do wdrożenia w systemie klienta.
pierwsze wydanie tego produktu to w rzeczywistości pakiet MSI o nazwie ” wersja_1.msi”, a drugie wydanie to ” wersja_2.msi”. Następnie te dwa MSI muszą mieć ten sam kod aktualizacji. Gdy użytkownicy uruchamiają ” wersję_2.msi ” w swoim systemie Instalator windows użyje kodu aktualizacji, aby zdecydować, czy poprzednie wersje tego produktu są już obecne w systemie.
interfejs API Instalatora „MsiEnumRelatedProducts()” używa kodu aktualizacji do odpytywania wszystkich produktów z rodziny.
Odinstaluj Pakiety MSI
jeśli chcesz odinstalować pakiet MSI i znalazłeś Kod produktu (GUID), możesz to zrobić w następujący sposób, korzystając z podniesionego wiersza polecenia (wyszukaj cmd.exe, kliknij prawym przyciskiem myszy i uruchom jako administrator):
Opcja 1: Podstawowa, interaktywna Deinstalacja bez logowania (szybkie i łatwe):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C}
szybkie wyjaśnienie parametrów:
- /X = Uruchom sekwencję odinstalowywania
- {00000000-0000-0000-0000-0000000000000C} = Kod produktu dla produktu do odinstalowania
możesz również włączyć (gadatliwe) rejestrowanie i uruchomić w trybie cichym, jeśli chcesz, prowadząc nas do opcji 2:
Opcja 2: cicha Deinstalacja z gadatliwym rejestrowaniem (lepiej dla plików wsadowych):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress
szybkie wyjaśnienie parametrów:
- /X = Uruchom sekwencję odinstalowywania
- {00000000-0000-0000-0000-000000000000C} = Kod produktu do odinstalowania produktu
- / QN = Uruchom całkowicie po cichu
- /L*V „C:\My.log ” = Verbose logging at specified path
- REBOOT=ReallySuppress = unikaj nieoczekiwanego, nagłego restartu