获取BizTalk中特定应用程序的所有挂起实例

时间:2012-08-03 11:45:47

标签: powershell wmi biztalk

在BizTalk Server管理控制台中,您可以查询已挂起的服务实例,然后按“应用程序名称”对其进行筛选。我需要没有BTS管理控制台的功能。

到目前为止,我已经创建了Powershell脚本来获取被挂起的实例:

$array = Get-WmiObject MSBTS_ServiceInstance `
           -Namespace 'root\MicrosoftBizTalkServer' `
           -Filter '(ServiceClass = 4 or ServiceClass = 1) `
                 and (ServiceStatus = 4 or ServiceStatus = 16)' 
foreach ($element in $array)
{
    Write-Host $element.InstanceID "-" $element.HostName "-" `
                 $element.ServiceStatus "-" $element.ServiceClass
}

如果您运行此脚本,您将获得所有已暂停的实例,但如何找到它们属于哪个应用程序?

任何使用PowerShell,WMI或C#的解决方案对我都有好处。

3 个答案:

答案 0 :(得分:2)

我使用过Microsoft.BizTalk.Operations程序集......

Add-Type -AssemblyName ('Microsoft.BizTalk.Operations, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL')
$dbServer = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\BizTalk Server\3.0\Administration' 'MgmtDBServer').MgmtDBServer
$dbName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\BizTalk Server\3.0\Administration' 'MgmtDBName').MgmtDBName
$bo = New-Object Microsoft.BizTalk.Operations.BizTalkOperations $dbServer, $dbName
$serviceInstances = $bo.GetServiceInstances()

$tgt = "DeploymentFramework.Samples.HelloWorld"
foreach ($instance in $serviceInstances)
{
    if ($instance.Application -ieq $tgt)
    {
        $completionStatus= $bo.TerminateInstance($instance.Id)
    }
}

我还没有解决的一件事...... Why does terminating a suspended (not resumable) service instance return Failed, yet it is terminated

答案 1 :(得分:1)

什么版本的BizTalk?

这适用于BizTalk 2010:

$array = Get-WmiObject MSBTS_ServiceInstance `
           -Namespace 'root\MicrosoftBizTalkServer' `
           -Filter '(ServiceClass = 4 or ServiceClass = 1) ` 
                 and (ServiceStatus = 4 or ServiceStatus = 16)' 
foreach ($element in $array)
{
    Write-Host $element.ServiceName
}

答案 2 :(得分:1)

应用程序名称属性不通过MSBTS_ServiceInstance类公开。我相信原因是,应用程序概念仅在BizTalk 2006中引入,但WMI API从2004年开始就存在。

我担心,你唯一的选择是直接进入数据库。