Search code examples
powershellnlb

Binding NLB to an interface


I have NLB installed and set up. I get the interface data like so:

Get-NlbClusterNodeNetworkInterface



InterfaceName       : quanet
   NlbBound            : False
   Cluster             :
   DhcpEnabled         : False
   InterfaceIP         : 10.165.250.206
   InterfaceSubnetMask : 255.255.0.0
   ClusterPrimaryIP    :
   ClusterSubnetMask   :

   InterfaceName       : cluster
   NlbBound            : False
   Cluster             :
   DhcpEnabled         : False
   InterfaceIP         : 172.16.1.206
   InterfaceSubnetMask : 255.255.255.0
   ClusterPrimaryIP    :
   ClusterSubnetMask   :

I would like to use Powershell to set NlbBound to true. Needless to say setting the property doesn't work. e.g

   $x = Get-NlbClusterNodeNetworkInterface
   $x[1].nlbbound = $true
   $x = Get-NlbClusterNodeNetworkInterface
   echo $x[1].NlbBound
   False

I want to avoid having to explicitly set the property in the Network adaptor settings because this functionality will live in a script. I'd also like to avoid using WMI if possible.

According to the Get-Member cmdlet the NlbBound property is setible:

Get-Member -InputObject $x[1]

   TypeName: Microsoft.NetworkLoadBalancingClusters.PowerShell.NetworkInterface

Name                MemberType Definition
----                ---------- ----------
Equals              Method     bool Equals(System.Object obj)
GetHashCode         Method     int GetHashCode()
GetType             Method     type GetType()
ToString            Method     string ToString()
Cluster             Property   System.String Cluster {get;set;}
ClusterPrimaryIP    Property   System.String ClusterPrimaryIP {get;set;}
ClusterSubnetMask   Property   System.String ClusterSubnetMask {get;set;}
DhcpEnabled         Property   System.Boolean DhcpEnabled {get;set;}
InterfaceIP         Property   System.String InterfaceIP {get;set;}
InterfaceName       Property   System.String InterfaceName {get;set;}
InterfaceSubnetMask Property   System.String InterfaceSubnetMask {get;set;}
NlbBound            Property   **System.Boolean NlbBound {get;set;}**

Solution

  • Import-Module ServerManager
    
    # Interface cards should be named the same and have a fixed IP
    $interfaceName = "NLB"
    $clusterName = "NLB-Cluster"
    $clusterIpAddress = "1.2.3.0"
    $clusterSubnet = "255.0.0.0"
    
    # Install Network Load Balancing and Tools
    Write-Host "Install Network Load Balancing and Tools"
    Add-WindowsFeature NLB, RSAT-NLB
    Import-Module NetworkLoadBalancingClusters
    
    # If the cluster hasn't been created yet then create it
    if (!(Get-NlbCluster -HostName $clusterIpAddress -ErrorAction SilentlyContinue))
    {
        Write-Host "Creating NLB Cluster: $clusterName" -ForegroundColor yellow 
    
        # Create Cluster (default unicast)
        New-NlbCluster -InterfaceName $interfaceName -ClusterName $clusterName -ClusterPrimaryIP $clusterIpAddress -SubnetMask $clusterSubnet 
    
        # Remove defaults
        Write-Host "Removing default port rules" -ForegroundColor yellow 
        Get-NlbClusterPortRule | Remove-NlbClusterPortRule -Force
    
        # Create port rules
        Get-NlbCluster | Add-NlbClusterPortRule -StartPort 80 -EndPort 80 -Protocol TCP -Affinity None | Out-Null
        Get-NlbCluster | Add-NlbClusterPortRule -StartPort 443 -EndPort 443 -Protocol TCP -Affinity None | Out-Null 
    }
    else
    {
        Get-NlbCluster 
    }
    
    # if this node isn't already a member of a cluster then add it
    if(!(Get-NlbClusterNode -HostName $env:COMPUTERNAME))
    {
        # Add node to cluster
        Write-Host "Adding node to cluster: $clusterName" -ForegroundColor yellow 
        Get-NlbCluster -HostName $clusterIpAddress | Add-NlbClusterNode -NewNodeName $env:COMPUTERNAME -NewNodeInterface $interfaceName
    }
    else
    {
        Get-NlbClusterNode
    }