使用Powershell在现有BizTalk应用程序中创建接收位置和发送端口

问题描述 投票:0回答:1

我需要使用Powershell在已经存在 BizTalk应用程序中创建接收位置并发送端口。我只看过一些有关如何创建应用程序的文档,但没有调用它。任何建议都是有益的。有些事情被注释掉了,那是因为我无法透露这些信息。我在最后一部分中添加了关于如何创建应用程序的知识,但这不是我想要的脚本。下面是我到目前为止的程序:

#===Create a receive port and location function===#

Function CreateRPandRL ()
{
    #Creating Receive Port
    $myReceivePort = $catalog.AddNewReceivePort($false)
    $myReceivePort.Name = "My Receive Port"

    #Creating Receive Location
    $myReceiveLocation = $myReceivePort.AddNewReceiveLocation()

    foreach ($handler in $catalog.ReceiveHandlers)
    {
        if ($handler.TransportType.Name -eq "FILE")
        {
            $myReceiveLocation.ReceiveHandler = $handler
            break
        }
    }

    #Associate a transport protocol and file location with receive location
    $myReceiveLocation.TransportType = $catalog.ProtocolTypes["FILE"]
    $myReceiveLocation.Address = #pick-up file location

    #Assign the first receive pipeline found to process the message
    foreach ($pipeline in $catalog.Pipelines)
    {
        if ($pipeline.Type -eq [Microsoft.BizTalk.ExplorerOM.PipelineType] "File_Receive")
        {
            $myReceiveLocation.ReceivePipeline = $pipeline
            break
        }

    #Enable the receive location
    $myReceiveLocation.Enable = $true
    }

    #Try to commit the changes made so far.  If the commit fails, roll back changes
    $catalog.SaveChanges()
}

Function CreateSendPorts($Catalog)
{
    #=== Register a trap handler to discard changes on exceptions ===#

    $ErrorActionPreference="silentlycontinue"
    trap { "Exception encountered:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();exit; }

    #=== create a new static one-way send port using FILE transport ===#

    $mySendPort = $Catalog.AddNewSendPort($false,$false)
    $mySendPort.Name = "My Send Port"
    $mySendPort.PrimaryTransport.TransportType = $catalog.ProtocolTypes["FILE"]
    $mySendPort.PrimaryTransport.Address = #drop-off file location
    $mySendPort.SendPipeline = $Catalog.Pipelines["Microsoft.BizTalk.DefaultPipelines.EdiSend"]

    #=== Persist new ports to BizTalk configuration database ===#

    Write-Host "Adding $mySendPort.Name..."
    $catalog.SaveChanges();
    Write-Host "`r`n $mySendPort.Name has been created."

    #=== specify filters for content-based routing ===#
    Write-Host $mySendPort.Name: Adding a filter
    $mySendPort.Filter = "<Filter><Group>" +
                       "<Statement Property='EDI.ISA06' Operator='0' Value='9999999999'/>" +
                       "<Statement Property='EDI.ST01' Operator='0' Value='999'/>" +
                       "<Statement Property='EDI.IsSystemGeneratedAck' Operator='0' Value='true'/>" +
                       "<Statement Property='BTS.ReceivePortName' Operator='0' Value= $myReceivePort.Name/>" +
                       "</Group></Filter>"
    #=== Persist all changes to BizTalk configuration database ===#

    Write-Host $mySendPort.Name + ": Saving changes"
    $catalog.SaveChanges();
    Write-Host "`r`nFilters for $mySendPort.Name created"

    #===========Changing Send Port status===========#

    #Register a trap handler to discard changes on exceptions
    $ErrorActionPreference="silentlycontinue"
    trap { "Exception encountered:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();exit; }

    #start the send port to begin processing messages
    $mySendPort.Status = [Microsoft.BizTalk.ExplorerOM.PortStatus] "Started"
    Write-Host "Changing" + $mySendPort.Name + "status to ($mySendPort.Status)..."
    $catalog.SaveChanges()
    Write-Host "Complete."


}
#===Main Script===#

#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 = #server_address; DATABASE=BizTalkMgmtDB; Integrated Security=SSPI"

#Implementing functions
CreateRPandRL
CreateSendPorts

Start-Sleep -Seconds 60


<#
#===BizTalk Application===#
$app = $Catalog.AddNewApplication()
$app.Name = "TestingPowershellScript"
$app.CreateRPandRL()
$app.CreateSendPorts()
#>
powershell biztalk
1个回答
0
投票

[伙计,这把我带回了几年,我很高兴我不是唯一为此感到挣扎的人。您希望不理会它,然后切换到BizTalk PowerShell Extensions(有关此信息是粗略的),它们非常容易在PowerShell中使用。

我从一些我使用过的脚本中将它们拼凑起来,并省略了一些奇特的东西,但是基本上你想要的是:]

$InitializeDefaultBTSDrive = $false
Import-Module "$env:BTSINSTALLPATH\SDK\Utilities\PowerShell\BizTalkFactory.PowerShell.Extensions.dll" -WarningAction Ignore

New-PSDrive -Name BizTalk -PSProvider BizTalk -Root BizTalk:\ -Instance $DatabaseName -Database $BizTalkMgmtDb

这打开了一个很好的世界,因为它作为PSDrive加载,因此您可以浏览它,创建事物,删除事物,并像其他任何驱动器/文件系统一样使用它,例如:

Get-ChildItem "BizTalk:\All Artifacts\Receive Locations"
Get-ChildItem "BizTalk:\All Artifacts\Receive Locations" | Disable-ReceiveLocation

Get-ChildItem "BizTalk:\Platform Settings\Host Instances" | Stop-HostInstance
Get-ChildItem "BizTalk:\Platform Settings\Host Instances" | Where-Object { $_.IsDisabled -eq $false  } | Start-HostInstance

Get-ChildItem "BizTalk:\All Artifacts\Receive Locations" | Enable-ReceiveLocation

Get-ChildItem -Path "BizTalk:\Health and Activity\Service Instances"

除了上述内容之外,还有很多,您真正想要的都不是,您真正想要的是:

Import-Bindings -Path "BizTalk:" -Source $bindings

$bindings是您的XML绑定文件。

© www.soinside.com 2019 - 2024. All rights reserved.