{"id":3,"date":"2009-10-18T05:01:53","date_gmt":"2009-10-18T12:01:53","guid":{"rendered":"http:\/\/joefield.mysite4now.com\/wordpress\/?p=3"},"modified":"2010-08-31T00:13:13","modified_gmt":"2010-08-31T00:13:13","slug":"obtaining-msi-product-version-powershell-10","status":"publish","type":"post","link":"https:\/\/blog.joefield.co.uk\/?p=3","title":{"rendered":"Obtaining MSI Product Version with Powershell 1.0"},"content":{"rendered":"<p>Want to know what version of a product is in an MSI? You need the ProductVersion property.<\/p>\n<p>It\u2019s a bit tricky to get at from Powershell 1.0, because there\u2019s no runtime type info for the Installer class.<\/p>\n<p>The following isn\u2019t pretty, but it does the job.<\/p>\n<pre class=\"brush: csharp\">\r\n#\r\n# Fetches ProductVersion from MSI file\r\n#\r\nparam($msiPath)\r\nif($msiPath -eq $null)\r\n{\r\n&quot;Expects full path to MSI file&quot;\r\nreturn;\r\n}\r\n\r\n# Create Installer instance\r\n$installer = New-Object -comObject WindowsInstaller.Installer\r\n\r\n# Call Installer.OpenDatabase(name, openMode)\r\n$database = $installer.GetType().InvokeMember(&quot;OpenDatabase&quot;, [System.Reflection.BindingFlags]::InvokeMethod, $null, $installer, ($msiPath, 0))\r\n\r\n# Call Database.OpenView(sql)\r\n$view = $database.GetType().InvokeMember(&quot;OpenView&quot;, [System.Reflection.BindingFlags]::InvokeMethod, $null, $database, &quot;SELECT `Value` FROM `Property` WHERE `Property` = 'ProductVersion'&quot;)\r\n\r\n# Call View.Execute()\r\n$view.GetType().InvokeMember(&quot;Execute&quot;, [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null)\r\n\r\n# Call View.Fetch()\r\n$record = $view.GetType().InvokeMember(&quot;Fetch&quot;, [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null)\r\n\r\n# Get Record.StringData(field)\r\n$productVersion = $record.GetType().InvokeMember(&quot;StringData&quot;, [System.Reflection.BindingFlags]::GetProperty, $null, $record, 1)\r\n\r\nWrite-Host $productVersion<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Want to know what version of a product is in an MSI? You need the ProductVersion property. It\u2019s a bit tricky to get at from Powershell 1.0, because there\u2019s no runtime type info for the Installer class. The following isn\u2019t pretty, but it does the job. # # Fetches ProductVersion from MSI file # param($msiPath) [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/3"}],"collection":[{"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3"}],"version-history":[{"count":10,"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/3\/revisions"}],"predecessor-version":[{"id":126,"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/3\/revisions\/126"}],"wp:attachment":[{"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.joefield.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}