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

Powershell 获取BizTalk中特定应用程序的所有挂起实例,powershell,wmi,biztalk,Powershell,Wmi,Biztalk,在BizTalk Server管理控制台中,您可以查询挂起的服务实例,然后按应用程序名称筛选它们。我需要这样的功能没有基站管理控制台 到目前为止,我已经创建了Powershell脚本以获取挂起的实例: $array = Get-WmiObject MSBTS_ServiceInstance ` -Namespace 'root\MicrosoftBizTalkServer' ` -Filter '(ServiceClass = 4 or Service

在BizTalk Server管理控制台中,您可以查询挂起的服务实例,然后按应用程序名称筛选它们。我需要这样的功能没有基站管理控制台

到目前为止,我已经创建了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#的解决方案都适合我。

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
}

未通过MSBTS_ServiceInstance类公开应用程序名称属性。我认为原因是,应用程序概念仅在BizTalk 2006中引入,但WMI API从2004年就出现了


恐怕,您唯一的选择是直接转到数据库。

我使用了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)
    }
}

有一件事我还没弄明白

它给了我服务名称,而不是应用程序(名称),只是我的2美分:在回答这个问题之前,我创建了自定义MSBuIld任务,该任务使用WMI查找应用程序和挂起的消息-唯一的问题是我无法批量终止它们,所以在循环中逐个终止它们花费了很多时间