Powershell: MSI Infos auslesen

Und wieder ein kleines, aber feines, Script, das den IT Alltag versüßen kann.

Hiermit lassen sich wichtig Infos, wie z.B. die Produkt ID einer MSI Datei auslesen.

function get-msiinfo
<#
.SYNOPSIS
funktion to get MSI details
.DESCRIPTION
get ProductCode, ProductVersion, ProductName
.PARAMETER $Path
specifies the path of MSI file
.PARAMETER $Property
Properies can be specified for ProductCode, ProductVersion, ProductName
.EXAMPLE
get-msiinfo -Path C:\temp\file.msi -Property ProductCode
get-msiinfo -Path C:\temp\file.msi -Property ProductVersion
get-msiinfo -Path C:\temp\file.msi -Property ProductName
#>
    {
    [CmdletBinding()]
    param(
        [parameter(Mandatory=$true)]
        [IO.FileInfo]$Path,
        [parameter(Mandatory=$true)]
        [ValidateSet("ProductCode","ProductVersion","ProductName")]
        [string]$Property
        )
    try {    
        $WindowsInstaller = New-Object -ComObject WindowsInstaller.Installer    
        $MSIDatabase = $WindowsInstaller.GetType().InvokeMember("OpenDatabase","InvokeMethod",$Null,$WindowsInstaller,@($Path.FullName,0))    
        $Query = "SELECT Value FROM Property WHERE Property = '$($Property)'"    
        $View = $MSIDatabase.GetType().InvokeMember("OpenView","InvokeMethod",$null,$MSIDatabase,($Query))    
        $View.GetType().InvokeMember("Execute", "InvokeMethod", $null, $View, $null)    
        $Record = $View.GetType().InvokeMember("Fetch","InvokeMethod",$null,$View,$null)    
        $Value = $Record.GetType().InvokeMember("StringData","GetProperty",$null,$Record,1)    
        return $Value
        } 
    catch {    
        Write-Output $_.Exception.Message
        }
    }

Diese Informationen können Installationen und Deinstallationen von MSI’s im Bereich von Software Deployment eine deutliche Erleichterung bedeuten.

MSI mit editieren

orca logo

Oft ist es hilfreich zu wissen, was eine MSI macht, welche Eigenschaften hinterlegt sind, eventuell auch Anpassungen vorzunehmen.

Hierzu gibt es ein “alt”-bewährtes Tool: Orca

Download Orca hier

Oder direkt bei Microsoft als Komponente des Windows SDK Components for Windows Installer Developers. Auch einige weiterführende Informationen können hier gefunden werden

MSI basierende Projekte aus InstallShield exe Installer extrahieren

Sehr oft ist in der professionellen Software Verteilung ein extrahieren von InstallShield Installern notwendig.

Ein Verarbeiten der gepackten Einzelkomponenten ist manchmal einfacher und oft Leistungsstärker. Auch der Funktionsumfang einer Installation kann dadurch angepasst werden. Es können einer extrahierten MSI aus einem InstallShield setup.exe eventuell einfacher Parameter mitgegeben werden.

Das Extrahieren passiert mit folgendem Befehl:

setup.exe /s /x /b"C:\temp\targetfolder" /v"/qn"

 

MSI extrahieren

Es gibt immer wieder die Notwendigkeit .msi Dateien zu extrahieren.

Diese Dateien beinhalten Installationsdateien und Konfigurationen, sowie Installationsanweisungen.

Die generelle Syntax ist wie folgt:

msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo

Beispiel:

msiexec /a Install-File.msi /qb TARGETDIR=C:\temp\extract_Install-File.msi