0

我正在通过 Powershell 以编程方式安装 COM+ 代理组件,在 msi 上使用 msiexec,然后使用 COMAdmin.COMAdminCatalog 对象在代理上设置远程服务器。

问题是新安装的代理需要一段时间才能在 COMAdminCatalog 的“应用程序”集合中可用。有没有办法在获取应用程序列表之前强制刷新目录?

本质上,我所做的是:

  1. msiexec /q /i $appName.msi

  2. 使用COMAdmin.COMAdminCatalog枚举应用程序。


function Set-Remote-Server-For-Complus-Application($appName, $remoteServer) {
    $comAdmin = New-Object -comobject COMAdmin.COMAdminCatalog
    $apps = $comAdmin.GetCollection("Applications")
    $apps.Populate();

$app = $apps | Where-Object {$_.Name -eq $appName}

if ($app -eq $null) {
    Write-Warning "Unable to find COM+ app ""$appName""."
    Return
}

$app.Value("ApplicationProxyServerName") = $remoteServer
$result = $apps.SaveChanges()
$apps = $null

if ($result -eq 1) {
    Write-Output "Successfully set complus remote server ""$remoteServer"" on ""$appName"""
}

}

问题是未找到该应用程序。如果我Start-Sleep -Seconds 2在调用之间添加一个,它会起作用。但是,睡眠不好,因为有时可能需要超过 2 秒,有时可能只需要 200 毫秒,因此等待时间过长。

有什么方法可以确保在我尝试枚举应用程序之前 COMAdmin.COMAdminCatalog 实际更新,而不是求助于睡眠并只希望获得最好的结果?

4

0 回答 0