Additional PowerShell scripts for Azure deployment
This section provides the PowerShell cmdlets with which you can perform the following configurations in Azure PowerShell:
- Provision a Citrix ADC VPX standalone instance
- Provision a Citrix ADC VPX pair in a high availability setup with an Azure external load balancer
- Provision a Citrix ADC VPX pair in a high availability setup with Azure internal load balancer
Also see the following topics for configurations that you can perform by using PowerShell commands:
- Configure a high-availability setup with multiple IP addresses and NICs by using PowerShell commands
- Configure GSLB on Citrix ADC VPX instances
- Configure GSLB on a NetScaler active-standby high-availability setup
- Configure multiple IP addresses for a Citrix ADC VPX instance in standalone mode by using PowerShell commands
- Configure multiple Azure VIPs for a standalone VPX instance
Provision a Citrix ADC VPX standalone instance
Create a resource group
The resource group can include all the resources for the solution, or only those resources that you want to manage as a group. The location specified here is the default location for resources in that resource group. Make sure all commands to create a load balancer use the same resource group.
$rgName="
" $locName="
New-AzureRmResourceGroup -Name $rgName -Location $locName
For example:
$rgName = "ARM-VPX" $locName = "West US" New-AzureRmResourceGroup -Name $rgName -Location $locName
Create a storage account
Choose a unique name for your storage account that contains only lowercase letters and numbers.
$saName="
" $saType="
, specify one:" Standard_LRS
,Standard_GRS
,Standard_RAGRS
, orPremium_LRS
New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName
For example:
$saName="vpxstorage" $saType="Standard\_LRS" New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName
Create an availability set
Availability set helps to keep your virtual machines available during downtime, such as during maintenance. A load balancer configured with an availability set ensures that your application is always available.
$avName="
" New-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName -Location $locName
Create a virtual network
Add a new virtual network with at least one subnet, if the subnet was not created previously.
$FrontendAddressPrefix="10.0.1.0/24"
$BackendAddressPrefix="10.0.2.0/24"
$vnetAddressPrefix="10.0.0.0/16"
$frontendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name frontendSubnet -AddressPrefix $FrontendAddressPrefix
$backendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -AddressPrefix $BackendAddressPrefix
New-AzureRmVirtualNetwork -Name TestNet -ResourceGroupName $rgName -Location $locName -AddressPrefix $vnetAddressPrefix -Subnet $frontendSubnet,$backendSubnet
For example:
$frontendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name frontendSubnet -AddressPrefix $FrontendAddressPrefix $backendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -AddressPrefix $BackendAddressPrefix New-AzureRmVirtualNetwork -Name TestNet -ResourceGroupName $rgName -Location $locName -AddressPrefix $vnetAddressPrefix -Subnet $frontendSubnet,$backendSubnet
Create a NIC
Create a NIC and associate the NIC with the Citrix ADC VPX instance. The front end Subnet created in the above procedure is indexed at 0 and the back end Subnet is indexed at 1. Now create NIC in one of the three following ways:
a)NIC with Public IP address
$nicName="
" $pip = New-AzureRmPublicIpAddress -Name $nicName -ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic
$nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[$subnetIndex].Id -PublicIpAddressId $pip.Id
b)NIC with Public IP and DNS label
$nicName="
" $domName="
" $pip = New-AzureRmPublicIpAddress -Name $nicName -ResourceGroupName $rgName -DomainNameLabel $domName -Location $locName -AllocationMethod Dynamic
Before assigning $domName, check it is available or not by using command:
Test-AzureRmDnsAvailability -DomainQualifiedName $domName -Location $locName
$nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[$subnetIndex].Id -PublicIpAddressId $pip.Id
For example:
$nicName="frontendNIC" $domName="vpxazure" $pip = New-AzureRmPublicIpAddress -Name $nicName -ResourceGroupName $rgName -DomainNameLabel $domName -Location $locName -AllocationMethod Dynamic $nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets\[0\].Id -PublicIpAddressId $pip.Id
c)NIC with Dynamic Public Address and Static Private IP address
Make sure that the private (static) IP address you add to the VM must be the same range as that of the subnet specified.
$nicName="
" $staticIP="
" $pip = New-AzureRmPublicIpAddress -Name $nicName -ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic
$nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[$subnetIndex].Id -PublicIpAddressId $pip.Id -PrivateIpAddress $staticIP
Create a virtual object
$vmName="
" $vmSize="
" $avSet=Get-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName
$vm=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id
Get the Citrix ADC VPX image
$pubName="
" $offerName="
" $skuName="
" $cred=Get-Credential -Message "Type the name and password of the local administrator account."
Provide your credentials that is used to log in into VPX
$vm=Set-AzureRmVMOperatingSystem -VM $vm -Linux -ComputerName $vmName -Credential $cred -Verbose
$vm=Set-AzureRmVMSourceImage -VM $vm -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest"
$vm=Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
For example:
$pubName="citrix"
The following command is used for displaying all offers from Citrix:
Get-AzureRMVMImageOffer -Location $locName -Publisher $pubName | Select Offer $offerName="netscalervpx110-6531"
The following command is used to know SKU offered by publisher for specific offer name:
Get-AzureRMVMImageSku -Location $locName -Publisher $pubName -Offer $offerName | Select Skus
Create a virtual machine
$diskName="
" For example:
$diskName="dynamic" $pubName="citrix" $offerName="netscalervpx110-6531" $skuName="netscalerbyol" $storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName $osDiskUri=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds/" + $diskName + ".vhd" $vm=Set-AzureRmVMOSDisk -VM $vm -Name $diskName -VhdUri $osDiskUri -CreateOption fromImage
When you create VM from Images present in marketplace, use the following command to specify the VM plan:
Set-AzureRmVMPlan -VM $vm -Publisher $pubName -Product $offerName -Name $skuName
New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm
Provision a Citrix ADC VPX pair in a high availability setup with an Azure external load balancer
Log on to AzureRmAccount using your Azure user credentials.
Create a resource group
The location specified here is the default location for resources in that resource group. Make sure that all commands used to create a load balancer use the same resource group.
$rgName="
" $locName="
" New-AzureRmResourceGroup -Name $rgName -Location $locName
For example:
$rgName = "ARM-LB-NS" $locName = "West US" New-AzureRmResourceGroup -Name $rgName -Location $locName
Create a storage account
Choose a unique name for your storage account that contains only lowercase letters and numbers.
$saName="
" $saType="
, specify one:" Standard_LRS
,Standard_GRS
,Standard_RAGRS
, orPremium_LRS
New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName
For example:
saName =“vpxstorage saType美元= New-Az“Standard_LRS”ureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName
Create an availability set
A load balancer configured with an availability set ensures that your application is always available.
$avName="
" New-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName -Location $locName
Create a virtual network
Add a new virtual network with at least one subnet, if the subnet was not created previously.
$vnetName = "LBVnet" $FrontendAddressPrefix="10.0.1.0/24" $BackendAddressPrefix="10.0.2.0/24" $vnetAddressPrefix="10.0.0.0/16" $frontendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name frontendSubnet -AddressPrefix $FrontendAddressPrefix $backendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -AddressPrefix $BackendAddressPrefix $vnet=New-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $locName -AddressPrefix $vnetAddressPrefix -Subnet $frontendSubnet,$backendSubnet
Note: Choose the AddressPrefix parameter value as per your requirement.
Assign front end and back end subnet to the virtual network that you created earlier in this step.
If the front end subnet is the first element of array VNet, subnetId must be $vnet.Subnets[0].Id.
If the front end subnet is the second element in the array, the subnetId must be $vnet.Subnets[1].Id, and so on.
Configure front end IP address and create back end address pool
Configure a front end IP address for the incoming load balancer network traffic and create a back end address pool to receive the load balanced traffic.
$pubName="PublicIp1" $publicIP1 = New-AzureRmPublicIpAddress -Name $pubName -ResourceGroupName $rgName -Location $locName -AllocationMethod Static -DomainNameLabel nsvpx
Note: Check for the availability of the value for DomainNameLabel.
$FIPName = "ELBFIP" $frontendIP1 = New-AzureRmLoadBalancerFrontendIpConfig -Name $FIPName -PublicIpAddress $publicIP1 $BEPool = "LB-backend-Pool" $beaddresspool1= New-AzureRmLoadBalancerBackendAddressPoolConfig -Name $BEPool
Create a health probe
Create a TCP health probe with port 9000 and interval 5 seconds.
$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name HealthProbe -Protocol Tcp -Port 9000 -IntervalInSeconds 5 -ProbeCount 2
Create a load balancing rule
Create an LB rule for each service that you are load balancing.
For example:
You can use the following example to load balance HTTP service.
$ lbrule1 = New-AzureRmLoadBalancerRuleConfig -Name "HTTP-LB" -FrontendIpConfiguration $frontendIP1 -BackendAddressPool $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 80
Create inbound NAT rules
Create NAT rules for services that you are not load balancing.
For example, when creating an SSH access to a Citrix ADC VPX instance.
Note: Protocol-FrontEndPort-BackendPort triplet must not be the same for two NAT rules.
$inboundNATRule1= New-AzureRmLoadBalancerInboundNatRuleConfig -Name SSH1 -FrontendIpConfiguration $frontendIP1 -Protocol TCP -FrontendPort 22 -BackendPort 22 $inboundNATRule2= New-AzureRmLoadBalancerInboundNatRuleConfig -Name SSH2 -FrontendIpConfiguration $frontendIP1 -Protocol TCP -FrontendPort 10022 -BackendPort 22
Create a load balancer entity
Create the load balancer adding all objects (NAT rules, load balancer rules, probe configurations) together.
lbName =“ELB NRPLB美元= New-AzureRmLoadBalancer再保险sourceGroupName $rgName -Name $lbName -Location $locName -InboundNatRule $inboundNATRule1, $inboundNATRule2 -FrontendIpConfiguration $frontendIP1 -LoadBalancingRule $lbrule1 -BackendAddressPool $beAddressPool1 -Probe $healthProbe
Create a NIC
Create two NICs and associate each NIC with each VPX instance
a) NIC1 with VPX1
For example:
$nicName="NIC1" $lbName="ELB" $bePoolIndex=0 \* Rule indexes starts from 0. $natRuleIndex=0 $subnetIndex=0 \* Frontend subnet index $lb=Get-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgName $nic1=New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -Subnet $vnet.Subnets\[$subnetIndex\] -LoadBalancerBackendAddressPool $lb.BackendAddressPools\[$bePoolIndex\] -LoadBalancerInboundNatRule $lb.InboundNatRules\[$natRuleIndex\]
b) NIC2 with VPX2
For example:
$nicName="NIC2" $lbName="ELB" $bePoolIndex=0 $natRuleIndex=1 \* Second Inbound NAT (SSH) rule we need to use `$subnetIndex=0 \* Frontend subnet index $lb=Get-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgName $nic2=New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -Subnet $vnet.Subnets\[$subnetIndex\] -LoadBalancerBackendAddressPool $lb.BackendAddressPools\[$bePoolIndex\] -LoadBalancerInboundNatRule $lb.InboundNatRules\[$natRuleIndex\]
Create Citrix ADC VPX instances
Create two Citrix ADC VPX instances as part of the same resource group and availability set, and attach it to the external load balancer.
a) Citrix ADC VPX instance 1
For example:
$vmName="VPX1" $vmSize="Standard\_A3" $pubName="citrix" $offerName="netscalervpx110-6531" $skuName="netscalerbyol" $avSet=Get-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName $vm1=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id $cred=Get-Credential -Message "Type Credentials which will be used to login to VPX instance" $vm1=Set-AzureRmVMOperatingSystem -VM $vm1 -Linux -ComputerName $vmName -Credential $cred -Verbose $vm1=Set-AzureRmVMSourceImage -VM $vm1 -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest" $vm1=Add-AzureRmVMNetworkInterface -VM $vm1 -Id $nic1.Id $diskName="dynamic" $storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName $osDiskUri1=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds1/" + $diskName + ".vhd" $vm1=Set-AzureRmVMOSDisk -VM $vm1 -Name $diskName -VhdUri $osDiskUri1 -CreateOption fromImage Set-AzureRmVMPlan -VM $vm1 -Publisher $pubName -Product $offerName -Name $skuName New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm1
b) Citrix ADC VPX instance 2
For example:
美元vmName = " VPX2 " vmSize =“标准\ _A3”avSet美元=得到zureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName $vm2=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id $cred=Get-Credential -Message " Type Credentials which will be used to login to VPX instance " $vm2=Set-AzureRmVMOperatingSystem -VM $vm2 -Linux -ComputerName $vmName -Credential $cred -Verbose $vm2=Set-AzureRmVMSourceImage -VM $vm2 -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest" $vm2=Add-AzureRmVMNetworkInterface -VM $vm2 -Id $nic2.Id $diskName="dynamic" $storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName $osDiskUri1=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds2/" + $diskName + ".vhd" $vm2=Set-AzureRmVMOSDisk -VM $vm2 -Name $diskName -VhdUri $osDiskUri1 -CreateOption fromImage Set-AzureRmVMPlan -VM $vm2 -Publisher $pubName -Product $offerName -Name $skuName New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm2
Configure the virtual machines
When both the Citrix ADC VPX instances start, then connect to both Citrix ADC VPX instances using the SSH protocol to configure the virtual machines.
a) Active-Active: Run the same set of configuration commands on the command line of both the Citrix ADC VPX instances.
b) Active-Passive: Run this command on the command line of both the Citrix ADC VPX instances.
add ha node #nodeID
In Active-Passive mode, run configuration commands on the primary node only.
Provision a Citrix ADC VPX pair in a high availability setup with Azure internal load balancer
Log on to AzureRmAccount using your Azure user credentials.
Create a resource group
The location specified here is the default location for resources in that resource group. Make sure all commands to create a load balancer use the same resource group.
$rgName="\
" $locName="\
" New-AzureRmResourceGroup -Name $rgName -Location $locName
For example:
$rgName = "ARM-LB-NS" $locName = "West US" New-AzureRmResourceGroup -Name $rgName -Location $locName
Create a storage account
Choose a unique name for your storage account that contains only lowercase letters and numbers.
$saName="
" $saType="
, specify one:" Standard_LRS
,Standard_GRS
,Standard_RAGRS
, orPremium_LRS
New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName
For example:
saName =“vpxstorage saType美元= New-Az“Standard_LRS”ureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName
Create an availability set
A load balancer configured with an availability set ensures that your application is always available.
$avName="
" New-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName -Location $locName
Create a virtual network
Add a new virtual network with at least one subnet, if the subnet was not created previously.
$vnetName = "LBVnet" $vnetAddressPrefix="10.0.0.0/16" $FrontendAddressPrefix="10.0.1.0/24" $BackendAddressPrefix="10.0.2.0/24" $vnet=New-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $locName -AddressPrefix $vnetAddressPrefix -Subnet $frontendSubnet,$backendSubnet\` $frontendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name frontendSubnet -AddressPrefix $FrontendAddressPrefix $backendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -AddressPrefix $BackendAddressPrefix
Note: Choose the AddressPrefix parameter value as per your requirement.
Assign front end and back end subnet to the virtual network that you created earlier in this step.
If the front end subnet is the first element of array VNet, subnetId must be $vnet.Subnets[0].Id.
If the front end subnet is the second element in the array, the subnetId must be $vnet.Subnets[1].Id, and so on.
Create a backend address pool
$beaddresspool= New-AzureRmLoadBalancerBackendAddressPoolConfig -Name "LB-backend"
Create NAT rules
Create NAT rules for services that you are not load balancing.
$inboundNATRule1= New-AzureRmLoadBalancerInboundNatRuleConfig -Name "Inboundnatrule1" -FrontendIpConfiguration $frontendIP -Protocol TCP -FrontendPort 3441 -BackendPort 3389 $inboundNATRule2= New-AzureRmLoadBalancerInboundNatRuleConfig -Name "RDP2" -FrontendIpConfiguration $frontendIP -Protocol TCP -FrontendPort 3442 -BackendPort 3389
Use front end and back end ports as per your requirement.
Create a health probe
Create a TCP health probe with port 9000 and interval 5 seconds.
$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name "HealthProbe" " -Protocol tcp -Port 9000 -IntervalInSeconds 5 -ProbeCount 2
Create a load balancing rule
Create an LB rule for each service that you are load balancing.
For example:
You can use the following example to load balance HTTP service.
$lbrule = New-AzureRmLoadBalancerRuleConfig -Name "lbrule1" -FrontendIpConfiguration $frontendIP -BackendAddressPool $beAddressPool -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 80
Use front end and back end ports as per your requirement.
Create a load balancer entity
Create the load balancer adding all objects (NAT rules, load balancer rules, probe configurations) together.
$NRPLB = New-AzureRmLoadBalancer -ResourceGroupName $rgname -Name "InternalLB" -Location $locName -FrontendIpConfiguration $frontendIP -InboundNatRule $inboundNATRule1,$inboundNatRule2 -LoadBalancingRule $lbrule -BackendAddressPool $beAddressPool -Probe $healthProbe
Create a NIC
Create two NICs and associate each NIC with each Citrix ADC VPX instance
$backendnic1= New-AzureRmNetworkInterface -ResourceGroupName $rgName -Name lb-nic1-be -Location $locName -PrivateIpAddress 10.0.2.6 -Subnet $backendSubnet -LoadBalancerBackendAddressPool $nrplb.BackendAddressPools\[0\] -LoadBalancerInboundNatRule $nrplb.InboundNatRules\[0\]
This NIC is for Citrix ADC VPX 1. The Private IP must be in same subnet as that of subnet added.
$backendnic2= New-AzureRmNetworkInterface -ResourceGroupName $rgName -Name lb-nic2-be -Location $locName -PrivateIpAddress 10.0.2.7 -Subnet $backendSubnet -LoadBalancerBackendAddressPool $nrplb.BackendAddressPools\[0\] -LoadBalancerInboundNatRule $nrplb.InboundNatRules\[1\].
This NIC is for Citrix ADC VPX 2.The parameter
Private IPAddress
can have any private IP as per your requirement.Create Citrix ADC VPX instances
Create two VPX instances part of the same resource group and availability set, and attach it to the internal load balancer.
a) Citrix ADC VPX instance 1
For example:
$vmName="VPX1" $vmSize="Standard\_A3" $avSet=Get-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName $vm1=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id $cred=Get-Credential -Message "Type Credentials which will be used to login to VPX instance" $vm1=Set-AzureRmVMOperatingSystem -VM $vm1 -Linux -ComputerName $vmName -Credential $cred -Verbose $vm1=Set-AzureRmVMSourceImage -VM $vm1 -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest" $vm1=Add-AzureRmVMNetworkInterface -VM $vm1 -Id $backendnic1.Id $diskName="dynamic" $storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName $osDiskUri1=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds1/" + $diskName + ".vhd" $vm1=Set-AzureRmVMOSDisk -VM $vm1 -Name $diskName -VhdUri $osDiskUri1 -CreateOption fromImage Set-AzureRmVMPlan -VM $vm1 -Publisher $pubName -Product $offerName -Name $skuName New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm1
b) Citrix ADC VPX instance 2
For example:
美元vmName = " VPX2 " vmSize =“标准\ _A3”avSet美元=得到zureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName $vm2=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id $cred=Get-Credential -Message " Type Credentials which will be used to login to VPX instance " $vm2=Set-AzureRmVMOperatingSystem -VM $vm2 -Linux -ComputerName $vmName -Credential $cred -Verbose $vm2=Set-AzureRmVMSourceImage -VM $vm2 -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest" $vm2=Add-AzureRmVMNetworkInterface -VM $vm2 -Id $backendnic2.Id $diskName="dynamic" $storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName $osDiskUri1=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds2/" + $diskName + ".vhd" $vm2=Set-AzureRmVMOSDisk -VM $vm2 -Name $diskName -VhdUri $osDiskUri1 -CreateOption fromImage Set-AzureRmVMPlan -VM $vm2 -Publisher $pubName -Product $offerName -Name $skuName New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm2
Configure the virtual machines
When both the Citrix ADC VPX instances start, then connect to both Citrix ADC VPX instances using the SSH protocol to configure the virtual machines.
a) Active-Active: Run the same set of configuration commands on the command line of both the Citrix ADC VPX instances.
b) Active-Passive: Run this command on the command line of both the Citrix ADC VPX instances.
add ha node #nodeID
In Active-Passive mode, run configuration commands on the primary node only.