Powershell-Tarkista ja löydä asennetun MSI-asennuksen tuoteohje
jotta tämä osio voidaan avata kokonaan, sinun on kirjauduttava sisään
tuotekoodi on sovelluksen tai tuotejulkistuksen yksilöllinen ohjenuora; toisin sanoen tuotteen eri versioilla ja kielillä on oltava eri tuotekoodit.
myös tuotekoodia voidaan käyttää ominaisuuksien tilan ja tuotteen tilan tiedusteluun. Esimerkiksi asennusrajapinnat ” MsiQueryFeatureStateEx ()” ja ”MsiQueryProductState ()” jne.
seuraavat neljä lähestymistapaa voivat antaa meille useita tapoja löytää ja hakea (myös etänä) asennettujen MSI-pakettien GUID:
käytä Powershell ”one-liner”
Kaikki tämän vaihtoehdon laukaisemat itsekorjaukset pitäisi yleensä olla mahdollista peruuttaa. Paketin eheystarkistukset käynnistetty ei lisätä joitakin tapahtumaloki ”melua” vaikka. Älä ota, että tunnistusnumero on tuotteen koodi (WMI erikoisuus).
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
PowerShellin Pikakäynnistys: pidä Windows-näppäintä painettuna, napauta R, kirjoita ”powershell” ja paina Enter.
käytä Vbscriptiä
tämä asetus voi olla turvallisempi kuin Powershell syistä, jotka on selitetty yksityiskohtaisesti alla.
pohjimmiltaan se on (paljon) nopeampi eikä kykene käynnistämään MSI: n itsekorjautumista, koska se ei mene WMI: n kautta (se pääsee MSI COM API: n kautta suoraan-rakkulanopeudella). Kuitenkin, se on enemmän mukana kuin Powershell vaihtoehto (useita riviä koodia).
voit kokeilla vbscriptiä saadaksesi tietoa MSI-automaatioliittymän kautta (Windowsin ydinominaisuus – se ei liity WMI: hen).
- kopioi alla oleva kirjoitus ja liitä siihen*.VBS tiedosto työpöydälle, ja yrittää ajaa sitä kaksoisnapsauttamalla. Työpöytäsi täytyy olla kirjoitettava sinulle, tai voit käyttää mitä tahansa muuta kirjoitettavaa sijaintia.
- tämä on näyte VBScript. Terävyyttä on pidetty parempana kuin virheiden käsittelyä ja täydellisyyttä, mutta sen pitäisi tehdä työ mahdollisimman monimutkaisesti.
- tulostetiedosto luodaan kansioon, josta suoritat komentosarjan (kansion on oltava kirjoitettava). Tulostiedosto on nimeltään msiinfo.csv.
- Kaksoisnapsauta tiedostoa avataksesi taulukkolaskentaohjelmassa, valitse pilkuksi erotin tuotaessa-tai-avaa tiedosto vain Muistiossa tai missä tahansa tekstikatselimessa. Taulukkolaskennan avaaminen mahdollistaa kehittyneet lajitteluominaisuudet.
- tätä komentosarjaa voidaan helposti muokata niin, että se näyttää huomattavan määrän lisätietoja MSI-asennuksesta.
'#### 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
rekisterin haku
löydät tuotekoodin myös avaamalla rekisterin tästä perusavaimesta: HKEY_LOCAL_MACHINE\SOFTWARE \ Microsoft \ Windows \ CurrentVersion\Uninstall.
paina F3-näppäintä ja etsi Tuotteen nimi. Jos se on 32-bittinen asennusohjelma 64-bittisellä koneella, se voi olla seuraavan avaimen alla:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node \ Microsoft\Windows \ CurrentVersion\Uninstall.
seuraavat rekisteriavaimet ovat yleisiä paikkoja, joissa etsitään ja etsitään MSI-pakettien Guideja:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
Alkuperäinen MSI-tiedosto
löydät tuotekoodin minkä tahansa MSI-tiedoston (ja minkä tahansa muun ominaisuuden) Ominaisuustaulukosta. Kuitenkin, GUID voisi mahdollisesti (harvoin) ohitetaan muunnos sovellettu asennuksen aikana ja siten ei vastaa GUID tuote on rekisteröity (lähestymistapa 1 ja 2 edellä raportoidaan todellinen tuotekoodi – joka on rekisteröity Windows – tällaisissa harvinaisissa skenaarioissa).
tarvitset työkalun MSI-tiedostojen katseluun. Katso kohti pohjaan seuraavan vastauksen luettelon ilmaisia työkaluja voit ladata (tai katso nopea vaihtoehto alla): Miten voin verrata sisältöä kaksi (tai enemmän) MSI tiedostoja?
helppouden ja nopeuden vuoksi voit ladata Superorcan viipymättä ja vaivatta tästä suoraan ladattavasta hotlinkistä – työkalu on tarpeeksi hyvä homman hoitamiseen-asenna, avaa MSI ja mene suoraan Majoituspöytään ja löydä Tuotekoodirivi (ole hyvä ja tarkista aina virus suoraan ladattavissa oleva hotlink-tietenkin – voit käyttää virustotal.com voit tehdä niin-online scan käyttäen kymmeniä anti-virus ja haittaohjelmia Sviitit skannata mitä lataat).
toinen, alkuperäinen, työkalu Orca on Microsoftin oma työkalu, siihen on asennettu Visual Studio ja Windows SDK. Kokeile etsiä Orca-x86_en-us.msi, under Program Files (x86) ja asentaa MSI jos löytyy.
Hae Tuotekoodit
Käynnistä Powershell (pidä Windows-näppäintä alhaalla, napauta R, vapauta Windows-avain, kirjoita ”powershell” ja paina OK) ja suorita alla oleva komento saadaksesi luettelon asennetuista MSI-paketin tuotekoodeista sekä paikallisen välimuistipakkauspolun ja tuotteen nimen (maksimoi PowerShell-ikkuna välttääksesi typistetyt nimet).
ennen kuin suoritat tämän komentorivin, lue alla oleva vastuuvapauslauseke (ei mitään vaarallista, vain joitakin mahdollisia haittoja). Jos yrität poistaa paketin on osa alla joitakin näyte msiexec.exe-komentorivit:
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
tuotoksen pitäisi olla samanlainen kuin tämä:
jostain kumman syystä ” ProductCode ”on WMI: ssä” IdentifyingNumber”. Toisin sanoen yllä olevassa kuvassa tunnistenumero on Tuotekoodi.
oudon Microsoftin suunnittelun vuoksi mikä tahansa WMI-puhelu Win32_Product-palveluun (kuten alla oleva PowerShell-komento) käynnistää paketin kiinteistön validoinnin. Sen lisäksi, että melko hidas, tämä voi harvinaisissa tapauksissa laukaista MSI itsekorjaus. Tämä voi olla pieni paketti tai jotain valtavaa – kuten Visual Studio. Useimmissa tapauksissa näin ei tapahdu, mutta riski on olemassa.
älä suorita tätä komentoa juuri ennen tärkeää kokousta, se ei ole koskaan vaarallinen (se on vain luku-kysely), mutta se saattaa johtaa pitkään korjaukseen hyvin harvinaisissa tapauksissa.
tuotoksen saa myös listamuodossa (taulukon sijaan):
get-wmiobject -class Win32_Product
tällöin lähtö on samanlainen kuin tämä:
Hae Tuotekoodit etätietokoneelta
teoriassa sinun pitäisi vain pystyä määrittämään etätietokoneen nimi osana itse komentoa. Tässä on sama komento kuin edellä perustettu toimimaan koneen ”RemoteMachine” (- tietokonenimi RemoteMachine osio lisätty):
get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
tämä saattaa toimia, jos käytät verkkotunnuksen järjestelmänvalvojan oikeuksia oikealla verkkotunnuksella. Työryhmäympäristössä (pieni toimisto / kotiverkko) sinun on todennäköisesti lisättävä käyttäjätunnukset suoraan WMI-puheluihin, jotta se toimisi.
lisäksi WMI: n etäyhteyksiin vaikuttavat (ainakin) Windowsin palomuuri, DCOM-asetukset ja Käyttäjätilien hallinta (UAC) (sekä kaikki muut kuin Microsoft-tekijät, esimerkiksi fyysiset tai virtuaaliset palomuurit, kolmannen osapuolen ohjelmistot, erilaiset tietoturvaohjelmistot jne.). Onko se toimii vai ei riippuu, yleensä, tarkka setup.
Powershell
PowerShell vaatii. Net Frameworkin asentamisen, mutta useimmilla moderneilla ose-järjestelmillä (Windows Server ja Windows-alustat, Powershell on jo mukana ja saatavilla). Myös itse PowerShell-sovellus voi puuttua koneesta, vaikka. Net olisi asennettu. Lopuksi PowerShell voidaan poistaa käytöstä tai lukita erilaisilla järjestelmäkäytännöillä ja-oikeuksilla.
jos näin on, voit kokeilla muutamaa muuta tapaa hakea tuotekoodeja. Vaihtoehtona on VBScript – ohjelma-se on nopea ja joustava (mutta voidaan myös lukita tiettyihin koneisiin, ja skriptaus on aina hieman enemmän mukana kuin työkalujen käyttö).
aloitetaan sisäänrakennetulla Windows WMI-työkalulla, jota käytetään yleensä WMI: n komponenttien ja toimintojen testaamiseen: wbemtest.exe.
- Launch wbemtest.exe (Pidä Windows-näppäintä alhaalla, napauta R, vapauta Windows-näppäin, Kirjoita ”wbemtest.exe ” ja paina OK).
- Valitse Yhdistä ja sitten OK (nimiavaruuden oletusarvo on root\cimv2) ja napsauta ”Yhdistä” uudelleen.
- Napsauta ”kysely” ja kirjoita tämä WQL-komento (SQL flavor): valitse tunnistusnumero,nimi,versio WIN32_PRODUCTISTA.
- Napsauta ”Käytä” (tai vastaava-työkalu lokalisoidaan).
Otostulos kuvakaappaus on seuraava. Ei mukavin muotoilu, mutta saat tarvitsemasi tiedot. Tunnistenumero on MSI-tuotekoodi:
Seuraava, voit kokeilla mukautettua, monipuolisempaa WMI-työkalua, kuten Wmiexploreria.exe.
- tämä ei sisälly Windowsiin. Se on kuitenkin erittäin hyvä väline.
- katso se osoitteesta: https://github.com/vinaypamnani/wmie2/releases.
- Käynnistä työkalu, valitse Connect, kaksoisnapsauta ROOT\CIMV2
- ”kysely-välilehdeltä”, kirjoita seuraava kysely valitse tunnistusnumero,nimi, versio WIN32_PRODUCT ja paina Suorita.
Hanki MSI-paketit GUID (vertaamalla Productcodea ja Upgradecodea)
Launch PowerShell: pidä Windows-ja R-näppäin alhaalla yhdessä, vapauta Windows-näppäin, Kirjoita ”powershell” ja paina OK tai paina Enter.
kopioi alla oleva skripti kokonaisuudessaan ja napsauta sitten hiiren kakkospainikkeella PowerShell-ikkunan sisällä.
Win32_propertylle suodatamme sekä rivit että sarakkeet (UpgradeCode on vain yksi monista rivityypeistä). Varaudu hitaaseen toimintaan, WMI on hyvin hidas tekemään tällaisia noutoja.
$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"
päivityskoodi on tuoteperheen yksilöivä tunnus. Toisin sanoen samoja tuotteita eri versioineen on todennäköisesti lähetetty muutamiin julkaisuihin. Näillä tuotteilla on eri Tuotekoodit, mutta ne linkitetään toisiinsa käyttämällä samaa Upgradecodea.
esimerkiksi olettaen, että kirjoitimme tuotteen nimeltä ”Happy MSI” ja tällä tuotteella on vain yksi MSI-paketti käyttöönotettavaksi asiakasjärjestelmässä.
tämän tuotteen ensimmäinen julkaisu on itse asiassa MSI-paketti nimellä ” version_1.msi”, ja toinen julkaisu on ” version_2.msi”. Sitten, nämä kaksi MSI on oltava sama UpgradeCode. Kun käyttäjät ajavat ”version_2.msi ” järjestelmässään windows installer käyttää UpgradeCode päättää, jos aiemmat versiot tästä tuotteesta ovat jo läsnä järjestelmässä.
Asennusliittymä ”MsiEnumRelatedProducts ()” käyttää Upgradecodea kyselläkseen kaikkia perheen tuotteita.
Poista MSI-pakettien asennus
jos haluat poistaa MSI-paketin ja löysit tuotekoodin (GUID), voit tehdä tämän seuraavasti käyttäen korotettua komentokehotetta (etsi cmd: tä.exe, napsauta hiiren kakkospainikkeella ja suorita admin):
vaihtoehto 1: Basic, interaktiivinen uninstall ilman kirjautumista (nopea ja helppo):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C}
Pikaparametrien selitys:
- /X = suorita uninstall sequence
- {00000000-0000-00000-00000-0000000000c} = Tuotekoodi, jolla tuotteen voi poistaa
voit myös ottaa käyttöön (monisanaisen) kirjauksen ja ajaa äänettömässä tilassa, Jos haluat, mikä johtaa vaihtoehtoon 2:
Vaihtoehto 2: äänettömän asennuksen poistaminen monisanaisella kirjauksella (parempi erätiedostoille):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress
Pikaparametrien selitys:
- /X = suorita uninstall sequence
- {00000000-0000-0000-000000000c} = Tuotekoodi, jolla tuote voidaan poistaa
- / QN = Suorita täysin hiljaa
- / L * V ”C:\My.log ” = Verbose logging at specified path
- REBOOT=ReallySuppress = Avoid unexpected, sudden reboot