以msi(powershell)更新值

时间:2014-12-24 11:58:06

标签: powershell

下午好 我需要更改表MSI中的值 通常选择表格,但这里有变化的问题。

例如选择:

$WindowsInstaller = New-Object -com WindowsInstaller.Installer
$Database = $WindowsInstaller.GetType().InvokeMember(“OpenDatabase”, “InvokeMethod”, $Null, $WindowsInstaller, ($msi_path,0))
$View = $Database.GetType().InvokeMember(“OpenView”, “InvokeMethod”, $Null, $Database, (“SELECT * FROM Control WHERE Control = 'LicenseText'”)) ....

($ msi_path,0),0从读取打开表,如果我尝试不是0(1或2),我收到错误:

  

[MethodInvocationException:异常调用" InvokeMember"用" 5"参数:" OpenDatabase,DatabasePath,OpenMode"]

有人告诉我可能是什么问题。或者可能有另一种方法来更改表中的值对powershell感兴趣。

1 个答案:

答案 0 :(得分:1)

我打算解决。

工作,表Msi的更新值是否正确运行

Function Change-MSIProperties($msi_path) {
    $Database = $null
    $View = $null
    [int]$msiOpenDatabaseMode = 2
    $WindowsInstaller = New-Object -com WindowsInstaller.Installer
    $Database = $WindowsInstaller.GetType().InvokeMember('OpenDatabase', 'InvokeMethod', $Null, $WindowsInstaller, ($msi_path,$msiOpenDatabaseMode))
    $View = $Database.GetType().InvokeMember('OpenView', 'InvokeMethod', $Null, $Database, ('UPDATE Feature SET Feature.Level=1 WHERE Feature.Level=0'))
    $View.GetType().InvokeMember('Execute', 'InvokeMethod', $Null, $View, $Null)| Out-Null

    $View.GetType().InvokeMember('Close', 'InvokeMethod',$Null,$View,$Null) | Out-Null
}