我想,这个Powershell代码将启动/关闭COM+。
$comAdmin= New-Object -com ("COMAdmin.COMAdminCatalog.1")
$comAdmin.ShutdownApplication("pkgAdap2")
$comAdmin.StartApplication("pkgAdap2")
Powershell没有抱怨。但是我如何查看应用程序是否已关闭/启动?我可以在"组件服务"窗口中看到它,但不确定如何判断它是否正在运行。
有没有一种简单的方法可以使用Powershell告诉我这一点?我发现有一个名为"IsPaused"的COMAdminCatalogObject,它返回真或假。但是,我不知道如何引用它。我找到的所有示例和解决方案都是通过组件服务中所有应用程序的多行循环。我在想这样的事情会起作用:
$comAdmin.IsPaused("pkgAdap2")
COM List
$comAdmin = New-Object -com ("COMAdmin.COMAdminCatalog.1")
$applications = $comAdmin.GetCollection("Applications")
$applications.Populate()
foreach ($application in $applications)
{
$components = $applications.GetCollection("Components",$application.key)
$components.Populate()
foreach ($component in $components)
{
$dllName = $component.Value("DLL")
$componentName = $component.Name
"Component Name:$componentName"
"DllName: $dllName`n"
}
}
您可以开始或停止使用:
$comAdmin.StartApplication("appName")
$comAdmin.ShutdownApplication("appName")
安装方式 :
参考:Microsoft链接
$comAdmin.InstallApplication("fileName")
要关闭所有 COM:
$sb = {
$admin = New-Object -Com ("COMAdmin.COMAdminCatalog")
$apps = $admin.GetCollection("Applications")
$apps.Populate()
$apps | % {
$component = $apps.GetCollection("Components", $_.Key)
$component.Populate()
$component | % {
$admin.ShutdownApplication("$_.Name")
}
}
}
$servers | % {Invoke-Command -ComputerName $_ -ScriptBlock $sb}
希望对您有所帮助。
那里:
$catalog = New-Object -ComObject "COMAdmin.COMAdminCatalog"
$appCollection = $catalog.GetCollection("Applications")
$appCollection.Populate()
$appList = @{}
$appCollection | ForEach-Object {
$appList.Add($_.Value("ID"), $_.Name)
}
$appInstances = $catalog.GetCollection("ApplicationInstances")
$appInstances.Populate()
$appInstanceList = @{}
$appInstances | ForEach-Object {
$appValue = $_.Value("Application")
$appInstanceList.Add($appValue, $appList[$appValue])
}
$appList.Keys | ForEach-Object {
New-Object PSObject -Property @{
"Name" = $appList[$_]
"ID" = $_
"Running" = $appInstanceList.ContainsKey($_)
}
}