Warum COM?
Das COM-Objekt WindowsInstaller.Installer liest die MSI direkt. Damit bekommst du belastbare Werte aus der Datenbank und nicht nur Oberflaecheninformationen.
MSI Praxisartikel
Dieser Artikel zeigt, wie du ProductCode, Version, Hersteller und weitere Kerninformationen direkt aus der MSI-Datenbank liest, statt dich auf Dateieigenschaften oder Herstellertexte zu verlassen.
Das COM-Objekt WindowsInstaller.Installer liest die MSI direkt. Damit bekommst du belastbare Werte aus der Datenbank und nicht nur Oberflaecheninformationen.
ProductCode, ProductVersion, ProductName, Hersteller, UpgradeCode und Architektur-Hinweise sind die Basis fuer Dokumentation, Detection und Upgrade-Logik.
$installer = New-Object -ComObject WindowsInstaller.Installer
$database = $installer.GetType().InvokeMember(
'OpenDatabase',
'InvokeMethod',
$null,
$installer,
@('C:\Temp\App.msi', 0)
)
$query = "SELECT `Property`,`Value` FROM `Property`"
$view = $database.GetType().InvokeMember('OpenView','InvokeMethod',$null,$database,($query))
$view.GetType().InvokeMember('Execute','InvokeMethod',$null,$view,$null) | Out-Null
while ($record = $view.GetType().InvokeMember('Fetch','InvokeMethod',$null,$view,$null)) {
$name = $record.StringData(1)
$value = $record.StringData(2)
[PSCustomObject]@{ Property = $name; Value = $value }
}