Я застрял в проблеме, прочитав несколько нестатических c значений из Msi-файла с powershell. Есть ли какие-нибудь идеи?
Я хочу прочитать не stati c значения из таблиц Msi.
Я могу фактически прочитать stati c значения из свойств таблицы, но по одному. как эта функция readMsiProperties ($ msifile, $ Property) {
# Read property from MSI database
$WindowsInstaller = New-Object -ComObject WindowsInstaller.Installer
$MSIDatabase = $WindowsInstaller.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $null, $WindowsInstaller, @($msiFile, 0))
$Query = "SELECT Value FROM Property WHERE Property = '$Property'"
try {
$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)
# Commit database and close view
$MSIDatabase.GetType().InvokeMember("Commit", "InvokeMethod", $null, $MSIDatabase, $null)
$View.GetType().InvokeMember("Close", "InvokeMethod", $null, $View, $null)
$MSIDatabase = $null
$View = $null
return $Value
#Catch NullValues if a Query is not correct or not in the MSI File
}
Catch {
}
}
Это прекрасно работает для таблицы свойств. Но если я хочу что-то прочитать из таблицы Serviceinstall, я не могу использовать значения stati c, которые я могу использовать как якорь.
, если я попробую это таким образом, я получу «InvokeMember с исключением 5 аргументов» для Переменная $ view.
функция readMsiServiceTable ($ msifile) {
#try{
# Read property from MSI database
$WindowsInstaller = New-Object -ComObject WindowsInstaller.Installer
$MSIDatabase = $WindowsInstaller.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $null, $WindowsInstaller, @($msiFile, 0))
$Query = "SELECT '*' FROM 'ServiceInstall' "
try {
$View = $MSIDatabase.GetType().InvokeMember("OpenView", "InvokeMethod", $null, $MSIDatabase, ($Query))
Итак, что я могу сделать вместо этого. Идея состоит в том, чтобы читать эти нестати c значения в массив или список для работы с ним.
Спасибо !!