2017-03-21 8 views

Antwort

3

Zur Vereinfachung der Admin-Zeit Konfiguration von BizTalk Server, Ports, Bindungen, etc. würden Sie sich auf die Verwendung von Binding-Dateien konzentrieren.

Während Powershell ein Teil davon sein kann, ist Powershell selbst nicht das, was die Konfiguration steuern würde.

Vielleicht sollten Sie sich wirklich damit beschäftigen, die App-Bereitstellung mit der Deployment Framework for BizTalk (BTDF) zu automatisieren.

0

Ich würde die Antwort von Johns-305 an zweiter Stelle - wenn Sie versuchen, die Anwendungsbindungen zu konfigurieren, sollten Sie Bindings-Dateien nutzen und definitiv BTDF verwenden, um mehrere Umgebungen zu verwalten.

Wenn Sie andererseits versuchen, die Einrichtung von Hosts/Host-Instanzen/Adapter-Handlern zu automatisieren, kann PowerShell ein großartiges Tool sein, um das Rollen in Umgebungen zu optimieren. Sie tun können, es den BizTalk-Powershell-Anbieter (mehr Beispiele für die Verwendung, wie man die here verwenden, oder mithilfe von WMI (großartigem Beispiel dafür here.

Von diesem zweiten Link, hier ist ein Beispiel für das Löschen oder einen Adapter Handler Erstellung mithilfe von WMI (Dies erfordert keine speziellen Add-Ins wie den BizTalk PowerShell-Anbieter - obwohl es ein großartiges Add-In zu haben ist, ist es nicht immer für eine bestimmte Umgebung verfügbar):

############################################################# 
# 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 
    } 
} 
Verwandte Themen