This script replicates the same configuration and settings that would be applied if the Exchange 2013 template had been used to configure a Virtual Service..

A file called exchange.sh is run which contains all of the information below. The variables are set as follows:

  • $1 - The username (bal)
  • $2 - The password (1fourall)
  • $3 - The LoadMaster IP address (20.200.50.50)
  • $4 - The IP address of the Virtual Service (20.200.50.200)

A redirect Virtual Service called Exchange HTTPS Offloaded - HTTPS Redirect is created.

Another Virtual Service called Exchange HTTPS Offloaded is also created.

sh exchange.sh bal 1fourall 20.200.50.50 20.200.50.200

#
# Exchange 2013 HTTPS Offloaded
#
#Redirect Virtual Service
curl -k -u $1:$2 "https://$3/access/addvs?vs=$4&port=80&prot=tcp&Nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20HTTP%20Redirect&forcel7=1&errorcode=302&errorurl=https:\/\/%25h%25s&checktype=none" 
#Main Virtual Service
curl -k -u $1:$2 "https://$3/access/addvs?vs=$4&port=443&prot=tcp&Nickname=Exchange%202013%20HTTPS%20Offloaded&Enable=Y&ForceL7=Y&SSLAcceleration=Y&SSLReverse=N&SSLReencrypt=N&Intercept=N&Transparent=Y&Schedule=rr&IdleTime=1800&CheckUse1.1=N&CheckType=http" 
#
# Exchange 2013 HTTPS Offloaded - ActiveSync
#
#Counter to increment arrays for returned SubVS and Real Server indices
counter=0;
#Find the VSIndex and the RsIndex of the first subvs created and store in arrays
subvsindexarray[$counter]=$(curl -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs=" | xpath Response/Success/Data/SubVS/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k "https://$1:$2@$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS/RsIndex/"text()")
#echo "Sub VS index is $counter"
#
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20ActiveSync&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/microsoft-server-activesync/healthcheck.htm&CheckType=https"
#
# Exchange 2013 HTTPS Offloaded - Autodiscover
#
let counter=$counter+1
curl -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20Autodiscover&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/autodiscover/healthcheck.htm&CheckType=https"
#
# Exchange 2013 HTTPS Offloaded - ECP
#
let counter=$counter+1
curl  -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20ECP&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/ecp/healthcheck.htm&CheckType=https"
#
# Exchange 2013 HTTPS Offloaded - EWS
#
let counter=$counter+1
curl  -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
 
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20EWS&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/ews/healthcheck.htm&CheckType=https"
#
# Exchange 2013 HTTPS Offloaded - MAPI
#
let counter=$counter+1
curl  -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20MAPI&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/mapi/healthcheck.htm&CheckType=https"
#
# Exchange 2013 HTTPS Offloaded - OAB
#
let counter=$counter+1
curl  -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
 
 
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20OAB&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/oab/healthcheck.htm&CheckType=https"
#
# Exchange 2013 HTTPS Offloaded - OWA
#
let counter=$counter+1
curl  -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20OWA&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/owa/healthcheck.htm&CheckType=https"
 
 
#
# Exchange 2013 HTTPS Offloaded - PowerShell
#
let counter=$counter+1
curl  -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20PowerShell&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/powershell&CheckType=https"
#
# Exchange 2013 HTTPS Offloaded - RCP Forward
#
let counter=$counter+1
curl  -k -u $1:$2 "https://$3/access/modvs?vs=$4&port=443&prot=tcp&createsubvs="
#Get indices
subvsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/VSIndex/"text()")
rsindexarray[$counter]=$(curl -k -u $1:$2  "https://$3/access/showvs?vs=$4&port=443&prot=tcp" | xpath Response/Success/Data/SubVS[last\(\)]/RsIndex/"text()")
 
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&nickname=Exchange%202013%20HTTPS%20Offloaded%20-%20RPC&Forward=nat&Weight=1000&Limit=0&Enable=Y"
curl  -k -u $1:$2 "https://$3/access/modvs?vs=${subvsindexarray[$counter]}&CheckPort=443&CheckUse1.1=Y&CheckURL=/rpc/healthcheck.htm&CheckType=https"
Note: The script below creates the necessary content rules. If these rules already exist on the LoadMaster, an error will occur.
#
# Create the content rules
#
rand=$RANDOM
curl -k -u $1:$2  "https://$3/access/addrule?name=Root_$rand&pattern=/^\/$/"
curl -k -u $1:$2  "https://$3/access/addrule?name=ActiveSync_$rand&pattern=/^\/microsoft-server-activesync.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=Autodiscover_$rand&pattern=/^\/autodiscover.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=ECP_$rand&pattern=/^\/ecp.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=EWS_$rand&pattern=/^\/ews.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=MAPI_$rand&pattern=/^\/mapi.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=OAB_$rand&pattern=/^\/oab.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=OWA_$rand&pattern=/^\/owa.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=PowerShell_$rand&pattern=/^\/powershell.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=RPC_$rand&pattern=/^\/rpc.*/&nocase=1"
curl -k -u $1:$2  "https://$3/access/addrule?name=Redirect_Root_$rand&type=4&replacement=/owa&pattern="/^\/$/""
#
# Add the rules to the correct Virtual Service
#
#Add the rule to the parent Virtual Service
curl -k -u $1:$2   "https://$1:$2@$3/access/addrequestrule?vs=$4&port=443&prot=tcp&rule=Redirect_Root_$rand"
#Add rules to the SubVS
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[0]}
amp;rule=ActiveSync_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[1]}&rule=Autodiscover_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[2]}&rule=ECP_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[3]}&rule=EWS_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[4]}&rule=MAPI_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[5]}&rule=OAB_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[6]}&rule=OWA_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[7]}&rule=PowerShell_$rand"
curl -k -u $1:$2  "https://$1:$2@$3/access/addrsrule?vs=$4&port=443&prot=tcp&rs=%21${rsindexarray[8]}&rule=RPC_$rand"