4

在 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# 的解决方案都对我有好处。

4

3 回答 3

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

我还没有解决的一件事......为什么终止暂停(不可恢复)的服务实例返回失败,但它被终止

于 2014-10-31T12:26:45.207 回答
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
}
于 2012-08-16T19:45:58.323 回答
1

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

恐怕,您唯一的选择就是直接进入数据库。

于 2012-08-26T15:25:14.640 回答