2017-01-11 19 views
1

這個PowerShell代碼將啓動/關閉一個COM +,我在想。有沒有簡單的Powershell命令來判斷COM +應用程序是否被暫停?

$comAdmin= New-Object -com ("COMAdmin.COMAdminCatalog.1") 

$comAdmin.ShutdownApplication("pkgAdap2") 

$comAdmin.StartApplication("pkgAdap2") 

Powershell不會抱怨。但是,我如何查看應用程序是否已關閉/啓動?我可以在組件服務窗口中看到它,但不知道如何判斷它是否正在運行。

有沒有簡單的方法來使用Powershell告訴我這個? 我發現有一個名爲「IsPaused」的COMAdminCatalogObject,它返回true或false。但是,我不知道如何引用它。我發現的所有示例和解決方案都是通過組件服務中的所有應用程序的多線循環。 我在想這樣的事情會的工作:

$comAdmin.IsPaused("pkgAdap2") 

回答

0

COM目錄

$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 Link

$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} 

希望它能幫助。

0

有:

$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($_) 
    } 
} 
相關問題