| # https://learn.microsoft.com/en-us/windows/win32/msi/database-tables |
| |
| param ( |
| $file |
| ) |
| |
| function printTable { |
| param ( |
| $msi, |
| [string]$name, |
| [int[]]$columns = (1) |
| ) |
| |
| try { |
| $view = $msi.OpenView("select * from " + $name) |
| $view.Execute() |
| while ($record = $view.Fetch()) { |
| Write-Host ($name + ": " + ($columns | ForEach-Object {"'" + $record.StringData($_) + "'"})) |
| } |
| } catch {} |
| } |
| |
| $installer = New-Object -ComObject WindowsInstaller.Installer |
| $msi = $installer.OpenDatabase($file, 0) |
| |
| printTable -msi $msi -name "Component" -columns 1,3 |
| printTable -msi $msi -name "Directory" -columns 1,2,3 |
| printTable -msi $msi -name "File" -columns 1,2,3 |
| printTable -msi $msi -name "Shortcut" -columns 1,2,3,4 |