2011-06-29 34 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 } 
相關問題