यह चाहिए की एक आसान जवाब दिया गया ... Windows इंस्टालर के साथ शुरू करने के लिए है एक COM object आप का उपयोग कर सकते हैं:
ProgID: WindowsInstaller.Installer
लेकिन जब आप के साथ के बाहर एक वस्तु बनाने
:-(
$object = New-Object -Com WindowsInstaller.Installer
$object | gm
... कुछ भी नहीं है: PowerShell आप गुण या किसी भी विधि का नहीं मिलता 210
स्पष्ट रूप से यह PowerShell और इसके प्रकार अनुकूलन प्रणाली के साथ एक समस्या है। इस ब्लॉग पोस्ट को आसपास के काम के लिए देखें।
http://www.snowland.se/2010/02/21/read-msi-information-with-powershell/
आप VBScript का उपयोग करते हैं तो आप इस समस्या नहीं होनी चाहिए।
संपादित करें:
यहाँ कुछ VBScript है कि संस्करण मैं found मिल जाएगा:
Const msiOpenDatabaseModeReadOnly = 0
Dim msi, db, view
Set msi = CreateObject("WindowsInstaller.Installer")
Set db = msi.OpenDataBase("C:\Users\andy\Desktop\Module.msi", msiOpenDatabaseModeReadOnly)
Set view = db.OpenView("SELECT `Value` FROM `Property` WHERE `Property` = 'ProductVersion'")
Call view.Execute()
GetVersion = view.Fetch().StringData(1)
Wscript.Echo GetVersion
आप PowerShell से कॉल कर सकते हैं:
$version = & cscript.exe /nologo GetVersion.vbs
अद्यतन! इस प्रकार की अनुकूलन समस्या मुझे निराशाजनक थी और मैं वीबीएस समाधान से खुश नहीं था। कुछ शोध के बाद मुझे PowerShell में ऐसा करने का एक तरीका मिला। मैंने कोड को blog entry से अनुकूलित किया। का आनंद लें!
function Get-MsiDatabaseVersion {
param (
[IO.FileInfo] $FilePath
)
try {
$windowsInstaller = New-Object -com WindowsInstaller.Installer
$database = $windowsInstaller.GetType().InvokeMember(
"OpenDatabase", "InvokeMethod", $Null,
$windowsInstaller, @($FilePath.FullName, 0)
)
$q = "SELECT Value FROM Property WHERE Property = 'ProductVersion'"
$View = $database.GetType().InvokeMember(
"OpenView", "InvokeMethod", $Null, $database, ($q)
)
$View.GetType().InvokeMember("Execute", "InvokeMethod", $Null, $View, $Null)
$record = $View.GetType().InvokeMember(
"Fetch", "InvokeMethod", $Null, $View, $Null
)
$productVersion = $record.GetType().InvokeMember(
"StringData", "GetProperty", $Null, $record, 1
)
$View.GetType().InvokeMember("Close", "InvokeMethod", $Null, $View, $Null)
return $productVersion
} catch {
throw "Failed to get MSI file version the error was: {0}." -f $_
}
}
Get-MsiDatabaseVersion "C:\Installer.msi"
धन्यवाद, मैं हटा दिया यह आपकी जानकारी के आधार पर है। – JNK
मेरे लिए काम नहीं करता है, मुझे एक त्रुटि मिलती है: "InvokeMethod" को "3" तर्क के साथ अपवाद: "5" तर्क के साथ अपवाद कॉल "InvokeMember": "OpenDatabase, DatabasePath, OpenMode" " – LeBleu
कोड में 'स्मार्ट कोट्स' शामिल हैं, जो कुछ लोगों को पकड़ा हो सकता है, आपको @LeBleu में त्रुटि दिखाई देगी, मैंने कोड स्निपेट अपडेट किया है। –