2017-04-07 4 views
1

Ich muss einige Informationen aus einem MSI mit einem angewandten MST lesen. Ich weiß, wie man die Tabellen von einem reinen MSI liest, aber nicht weiß, wie man eine MST anwendet.Powershell Get MST Info

habe ich dies für MSI:

Process { 
    try { 
     # Read property from MSI database 
     $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)'" 
     # $Query = "SELECT Action FROM CustomAction WHERE Action = '$($CustomAction)'" 
     $View = $MSIDatabase.GetType().InvokeMember("OpenView", "InvokeMethod", $null, $MSIDatabase, ($Query)) 
     $View.GetType().InvokeMember("Execute", "InvokeMethod", $null, $View, $null) | out-null 
     $Record = $View.GetType().InvokeMember("Fetch", "InvokeMethod", $null, $View, $null) 
     try { 
      $Value = $Record.GetType().InvokeMember("StringData", "GetProperty", $null, $Record, 1) 

      # Commit database and close view 
      $MSIDatabase.GetType().InvokeMember("Commit", "InvokeMethod", $null, $MSIDatabase, $null) | out-null 
      $View.GetType().InvokeMember("Close", "InvokeMethod", $null, $View, $null) | Out-Null 
      $MSIDatabase = $null 
      $View = $null 
     } catch { 
      $Value = "-" 
     } 
     # Return the value 

     return $Value 

Wenn mir jemand es wirklich schön sein kann helfen würde!

Danke, Moritz :)

Antwort

0

überprüfen Sie das Beispiel aus dem Win SDK "wilstxfm.vbs" aus. Auf meinem System ist es auf diesem Pfad installiert:

c:\Program Files (x86)\Windows Kits\8.1\bin\x64\wilstxfm.vbs 

kann nicht den Code hier einfügen wegen Copyright-Frage, aber sie tun im Grunde diese:

database = installer.OpenDatabase(msiPath,0) 
database.ApplyTransform(mstPath, iteViewTransform + iteAddExistingRow + iteDelNonExistingRow + iteAddExistingTable + iteDelNonExistingTable + iteUpdNonExistingRow + iteChangeCodePage) 
view = database.OpenView("SELECT * FROM `_TransformView` ORDER BY `Table`, `Row`") 

Dann iterieren sie über die Datensätze der Ansicht, um die Änderungen zu drucken, die die Transformation bewirken würde.

Sie sollten in der Lage sein, das .vbs-Beispiel in PowerShell-Code zu übersetzen oder einfach das .vbs-Skript von PS aufzurufen.