2011-06-29 31 views
1

我需要列出所有的应用程序,编排(如果有的话),为BizTalk 2010发送端口和接收端口。我试图写一个SQL查询并获取许多重复。谁能帮我?列出所有应用程序,编排(如果有的话),为BizTalk 2010发送端口和接收端口?

SELECT 
    APP.nvcName 
    ,APP.nvcName as [Application] 
    ,A.nvcName AssemblyName 
    ,O.nvcFullName OrchestrationFullName 
    ,O.nvcName Orchestration 
    ,'Send Port' as [PortType] 
    ,S.nvcName as [PortName] 
    ,S.bTwoWay as [SendType] 
    ,'' --S.nvcName [ReceiveLocation] 
    ,Adp.Name [AdapterType] 
    ,RP.FullyQualifiedName [ReceivePipeline] 
    ,SP.FullyQualifiedName [SendPipeline] 
    ,S.nvcEncryptionCert [EncryptionCert] 
FROM dbo.bts_application as APP 
LEFT OUTER JOIN dbo.bts_sendport as S ON APP.nID = S.nApplicationID 
LEFT OUTER JOIN dbo.bts_sendport_transport as ST ON S.nID = ST.nSendPortID 
LEFT OUTER JOIN dbo.bts_assembly as A on A.nApplicationId = APP.nId 
LEFT OUTER JOIN dbo.bts_orchestration as O ON O.nAssemblyID = A.nId 
LEFT OUTER JOIN dbo.bts_orchestration_port AS OP ON OP.nOrchestrationID = O.nID 
LEFT OUTER JOIN dbo.bts_orchestration_port_binding as OPB ON PB.nOrcPortID = OP.nID --and OPB.nSendPortID = S.nID 
LEFT OUTER JOIN dbo.adm_Adapter as Adp ON ST.nTransportTypeId = Adp.Id 
LEFT OUTER JOIN dbo.bts_pipeline as RP on RP.Id = S.nReceivePipelineId 
LEFT OUTER JOIN dbo.bts_pipeline as SP on SP.Id = S.nSendPipelineId 
WHERE S.nApplicationID is not null AND Adp.Name IS NOT NULL 

回答

5

直接与下面的SQL工作一般比类似的BizTalkCatalogExplorer类的工作更难以得到正确的(和不支持)。

MSDN有一个很棒的Powershell脚本,它使用的是BizTalkCatalogExplorer,网址为http://msdn.microsoft.com/en-us/library/dd257590(v=bts.70).aspx。除了实际的发送/接收端口之外,它会显示你提到的一切(然后是一些)。

要获得发送端口的详细信息,你可以做这样的事情(这是PowerShell的,基于链接到上面的示例):

#=== Make sure the ExplorerOM assembly is loaded ===# 
[void] [System.reflection.Assembly]::LoadWithPartialName("Microsoft.BizTalk.ExplorerOM") 
#=== Connect to the BizTalk Management database ===# 
$Catalog = New-Object Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer 
$Catalog.ConnectionString = "SERVER=.;DATABASE=BizTalkMgmtDb;Integrated Security=SSPI" 
foreach($port in $catalog.SendPorts) 
{ 
    Write-Host $port.Name 
    Write-Host "`tSendPipeline: "$port.SendPipeline.FullName 
    if($port.IsTwoWay) 
    { 
     Write-Host "`tReceivePipeline: "$port.ReceivePipeline.FullName 
    } 
    Write-Host "`tPrimaryTransportType: "$port.PrimaryTransport.TransportType.Name 
    Write-Host "`tPrimaryTransportAddress: "$port.PrimaryTransport.Address 
    Write-Host "`tPrimaryTransportTypeData: "$port.PrimaryTransport.TransportTypeData 
    # $port.PrimaryTransport <--uncomment to see all of the properties of $port.PrimaryTransport 
} 

注意的$port.PrimaryTransport.TransportTypeData的结果将是一个XML片断包含传输类型自定义的属性。它位于该XML的内部,您可以找到密码字段。你必须解析它。当我在本地运行此测试时,它实际上也会打印出密码,所以要小心如何使用此密码。

+0

感谢您的答复。你是对的,但我只是阅读(不修改)数据库来填充一些报告。我还需要获取受密码保护的发送端口列表。原因是,从2010年QA迁移到2010年的产品时,我需要知道是否有某些应用程序因密码保护而崩溃。然后,我可以通知管理员手动添加密码,因为导出应用程序不会导出密码(非常感谢)。你能帮助我吗? – rizalp1

+0

我通过添加一个示例来更新我的答案,即如何使用Powershell + ExplorerOM获取发送端口。 – schellack

+0

直到周二我回去工作时,我都无法尝试。但是,如果这样做,我会非常感激你。非常感谢您的帮助,我已经接受了您的回答! – rizalp1

0

您可以使用PowerShell的对列表中的所有应用程序,业务流程,接收和发送端口状态

# Get BizTalk Application Information 

$applications = $BizTalkOM.Applications 



# Display BizTalk Application Information 

Write-Host "`nBizTalk Applications ("$applications.Count")" -fore DarkGray 



Foreach ($application in $applications) { 

    if ($application.Status -eq "Started") { 

     Write-Host $application.Name "- " -NoNewline 

     Write-Host $application.Status -fore Green 

    } 

    elseif ($application.Status -eq "Stopped") { 

     Write-Host $application.Name "- " -NoNewline 

     Write-Host $application.Status -fore Red 

    } 

    else { 

     Write-Host $application.Name "- " -NoNewline 

     Write-Host $application.Status -fore DarkYellow 

    } 

} 
$trackingRecPorts = get-wmiobject MSBTS_ReceivePort -namespace 'root\MicrosoftBizTalkServer' | Where-Object {$_.Tracking -gt 0 } 


$orchs = Get-WmiObject MSBTS_Orchestration -namespace 'root\MicrosoftBizTalkServer' | Where-Object {$_.OrchestrationStatus -ne 4 } 
相关问题