繁体   English   中英

PowerShell脚本自动执行BizTalk配置

[英]PowerShell scripts to automate BizTalk configurations

我需要帮助来自动化BizTalk配置(例如发送/接收位置等)。我认为我们可以使用PowerShell脚本来实现这一点。

有什么建议么?

注意:我们拥有本地基础结构。

为了简化BizTalk Server,端口,绑定等的管理时配置,您将集中精力使用绑定文件。

虽然Powershell可以是其中的一部分,但Powershell本身并不是驱动配置的因素​​。

也许您真正应该看的是使用BizTalk部署框架(BTDF)自动化应用程序部署。

我是Johns-305的第二回答-如果您要配置应用程序绑定,则应该利用绑定文件,并且一定要考虑使用BTDF来管理多个环境。

另一方面,如果您尝试自动设置主机/主机实例/适配器处理程序,那么PowerShell可以是简化跨环境一致地进行部署的一个很好的工具。 您可以使用BizTalk PowerShell提供程序( 此处有多个使用示例的示例,也可以使用WMI( 此处有个绝佳的示例)来完成此操作

在第二个链接中,这是一个使用WMI删除或创建适配器处理程序的示例(它不需要BizTalk PowerShell提供程序之类的任何特殊加载项-尽管它是一个很好的加载项,但并非总是可用于给定的环境):

#############################################################
# This function will delete an existente host handlers 
# in the adapters.
# [direction]: 'Receive','Send'
#############################################################
function DeleteBizTalkAdapterHandler (
    [string]$adapterName,
    [string]$direction,
    [string]$hostName)
{
    try
    {
        if($direction -eq 'Receive')
        {
            [System.Management.ManagementObject]$objHandler = get-wmiobject 'MSBTS_ReceiveHandler' -namespace 'root\MicrosoftBizTalkServer' -filter "HostName='$hostName' AND AdapterName='$adapterName'"
            $objHandler.Delete()
        }
        else
        {
            [System.Management.ManagementObject]$objHandler = get-wmiobject 'MSBTS_SendHandler2' -namespace 'root\MicrosoftBizTalkServer' -filter "HostName='$hostName' AND AdapterName='$adapterName'"
            $objHandler.Delete()
        }

        Write-Host "$direction handler for $adapterName / $hostName was successfully deleted" -Fore DarkGreen
    }
    catch [System.Management.Automation.RuntimeException]
    {
        if ($_.Exception.Message -eq "You cannot call a method on a null-valued expression.")
        {
            Write-Host "$adapterName $direction Handler for $hostName does not exist" -Fore DarkRed
        }
        elseif ($_.Exception.Message.IndexOf("Cannot delete a receive handler that is used by") -ne -1)
        {
            Write-Host "$adapterName $direction Handler for $hostName is in use and can't be deleted." -Fore DarkRed
        }
        elseif ($_.Exception.Message.IndexOf("Cannot delete a send handler that is used by") -ne -1)
        {
            Write-Host "$adapterName $direction Handler for $hostName is in use and can't be deleted." -Fore DarkRed
        }
        elseif ($_.Exception.Message.IndexOf("Cannot delete this object since at least one receive location is associated with it") -ne -1)
        {
            Write-Host "$adapterName $direction Handler for $hostName is in use by at least one receive location and can't be deleted." -Fore DarkRed
        }
        else
        {
            write-Error "$adapterName $direction Handler for $hostName could not be deleted: $_.Exception.ToString()"
        }
    }
}

#############################################################
# This function will create a handler for a specific 
# adapter on the new host, so these get used for processing.
# [direction]: 'Receive','Send'
#############################################################
function CreateBizTalkAdapterHandler(
    [string]$adapterName,
    [string]$direction,
    [string]$hostName,
    [string]$originalDefaulHostName,
    [boolean]$isDefaultHandler,
    [boolean]$removeOriginalHostInstance)
{
    if($direction -eq 'Receive')
    {
        [System.Management.ManagementObject]$objAdapterHandler = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_ReceiveHandler").CreateInstance()
        $objAdapterHandler["AdapterName"] = $adapterName
        $objAdapterHandler["HostName"] = $hostName
    }
    else
    {
        [System.Management.ManagementObject]$objAdapterHandler = ([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_SendHandler2").CreateInstance()
        $objAdapterHandler["AdapterName"] = $adapterName
        $objAdapterHandler["HostName"] = $hostName
        $objAdapterHandler["IsDefault"] = $isDefaultHandler
    }

    try
    {
        $putOptions = new-Object System.Management.PutOptions
        $putOptions.Type = [System.Management.PutType]::CreateOnly;

        [Type[]] $targetTypes = New-Object System.Type[] 1
        $targetTypes[0] = $putOptions.GetType()

        $sysMgmtAssemblyName = "System.Management"
        $sysMgmtAssembly = [System.Reflection.Assembly]::LoadWithPartialName($sysMgmtAssemblyName)
        $objAdapterHandlerType = $sysMgmtAssembly.GetType("System.Management.ManagementObject")

        [Reflection.MethodInfo] $methodInfo = $objAdapterHandlerType.GetMethod("Put", $targetTypes)
        $methodInfo.Invoke($objAdapterHandler, $putOptions)

        Write-Host "$adapterName $direction Handler for $hostName was successfully created" -Fore DarkGreen
    }
    catch [System.Management.Automation.RuntimeException]
    {
        if ($_.Exception.Message.Contains("The specified BizTalk Host is already a receive handler for this adapter.") -eq $true)
        {
            Write-Host "$hostName is already a $direction Handler for $adapterName adapter." -Fore DarkRed
        }
        elseif($_.Exception.Message.Contains("The specified BizTalk Host is already a send handler for this adapter.") -eq $true)
        {
            Write-Host "$hostName is already a $direction Handler for $adapterName adapter." -Fore DarkRed
        }
        else {
            write-Error "$adapterName $direction Handler for $hostName could not be created: $_.Exception.ToString()"
        }
    }

    if($removeOriginalHostInstance)
    {
        DeleteBizTalkAdapterHandler $adapterName $direction $originalDefaulHostName
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM