15 lines
1.2 KiB
PowerShell
15 lines
1.2 KiB
PowerShell
param([Parameter(Mandatory=$true)][string]$PackagePath)
|
|
$ErrorActionPreference = 'Stop'
|
|
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
|
# MSIDBOPEN_READONLY = 0. Reading COM properties never installs the package.
|
|
$installer = New-Object -ComObject WindowsInstaller.Installer
|
|
$summary = $installer.GetType().InvokeMember('SummaryInformation', 'GetProperty', $null, $installer, @($PackagePath, 0))
|
|
$template = $summary.GetType().InvokeMember('Property', 'GetProperty', $null, $summary, @(7))
|
|
$database = $installer.GetType().InvokeMember('OpenDatabase', 'InvokeMethod', $null, $installer, @($PackagePath, 0))
|
|
$view = $database.GetType().InvokeMember('OpenView', 'InvokeMethod', $null, $database, @('SELECT `Value` FROM `Property` WHERE `Property` = ''ProductVersion'''))
|
|
$view.GetType().InvokeMember('Execute', 'InvokeMethod', $null, $view, $null) | Out-Null
|
|
$record = $view.GetType().InvokeMember('Fetch', 'InvokeMethod', $null, $view, $null)
|
|
if ($null -eq $record) { throw 'Missing MSI ProductVersion' }
|
|
$version = $record.GetType().InvokeMember('StringData', 'GetProperty', $null, $record, @(1))
|
|
@{ template = [string]$template; version = [string]$version } | ConvertTo-Json -Compress
|