2017-03-21 4 views
0

送受信場所などのBizTalk構成を自動化するには、助けが必要です。 私はこれをPowerShellスクリプトを使用して実現できると思います。BizTalk構成を自動化するためのPowerShellスクリプト

提案がありますか?

注:私たちは、オンプレミスのインフラストラクチャを持っています。あなたはバインディングファイルを使用することに焦点を当てるなどのBizTalk Server管理時の設定、ポート、バインディングを、容易にするため

答えて

3

PowerShellは、このの一部にすることができますが、PowerShellの自身が設定を運転しまうものではありません。あなたが本当にDeployment Framework for BizTalk (BTDF)を使用して、アプリケーションの展開を自動化されているはずですおそらく何

0

私はアプリケーションバインディングを設定しようとしている場合、バインディングファイルを活用し、BTDFを使用して複数の環境を管理する必要があります。

一方、ホスト/ホストインスタンス/アダプタハンドラの設定を自動化しようとしている場合、PowerShellは環境間で安定したローリングを合理化するための優れたツールとなります。 BizTalk PowerShellプロバイダー(WMI(そのhereの偉大な例をそのhereを使用し、または使用する方法の複数の例を使用してそれを行うことができます。

を、第2のリンクから、ここでは、削除または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 
    } 
} 
関連する問題