Windows 10 and NIC teaming… the never ending story… Before starting let’s remind the situation: Attempt to use PowerShell to build a network teaming based on Microsoft stack doesn’t work since early windows 10 release (that was not the case with Windows 8), but 3rd party vendors can provide their own implementation to overcome OS limitations.
Intel has build a package driver to support this feature… but you must fight first to be allowed to use it. Here follows the necessary power punches to defeat the beast:
Installing Intel Drivers manually
Teaming with intel adapters is available after installing the ProSet DX package (beware: teaming is only supported on selected models!!!). The package provide an enhanced user interface to configure NICs but also a PowerShell module for automation.
After downloading, you should unzip the package with 7-Zip and go to subfolder PROWinx64\APPS\PROSETDX\Winx64 to launch DxSetup.exe.
within a few seconds, it fails with the following error: “Cannot install drivers. No Intel® Adapters are present in this computer”:
After digging on the internet it appeared that the network Drivers that come with Windows 10/Server 2016 are different from the drivers of the ProSet Dx packages. Thanks to plug and play, when the adapter is added to the hardware, that ‘Builtin Windows’ drivers are installed by default, and as the windows version doesn’t match with the package requirement, the installation simply fails !
So the first thing to do is to update the Windows drivers with the ProSetDx one:
In the device manager, click one of your Intel adapters and click on update. When prompted, select option “browse my computer for driver” and pick up the folder where the ProSet Dx package was extracted
If your adapter updated successfully you are now ready to enjoy NIC teaming. You can click again on the DxSetup.exe file and start to tweak your configuration…Else… Forget about it or buy a more robust pair of NIC cards.
Installing Intel drivers with MDT
As we now know how to trick the installer, let’s automate the process using your favorite deployment tool (No it’s not Config Manager).
From a High level perspective, we need to make sure that the Intel version of the driver is installed before launching the ProSet Dx setup. This task can be accomplished easily by forcing driver’s installation. But first you need to figure out which driver to import:
On a computer where the Intel adapters are installed: Open the device manager, select one NIC, click on properties and then on the details tab. On the drop down menu select Hardware IDs and copy the values from the first line
Now go to the folder where the ProSet Dx package is unzipped and past the hardware ID in the search bar of your explorer’s window.
To obtain a usable result you must tweak the search like this:
- the hardware ID should be truncated to VEN_XXX DEV_XXXX SUBSYS_XXXX (where XXXX are the values from your hardware)
- In the search setting, file content option must be checked.
The result should return a list of .inf files ( results may vary depending on your hardware). If like me your list show different NDIS version of the same driver, choose the one with the highest NDIS number.
Note : Intel drivers are usually packaged altogether in a single folder. So instead of importing a bunch of useless drivers by selecting the parent folder. Create a separate folder, put in the .inf file and his corresponding .cat file. Then, all the files and subfolders described in the [SourceDiskFiles] section of the inf file.
For this blog post I worked with an Intel I350 Network adapter, here is the resulting folder:
Now we can import the driver in MDT, If you have other hardware that are planed to do teaming with the same adapter, you should also consider adding it to them.
Installing ProSet Dx
Then we need to create an application to deploy ProSet Dx. To create an MDT application (with sources), you will first need to expand the package to pick the whole content of the folder .\PROWinx64\APPS\PROSETDX\Winx64 and set it as the source application folder.
The command to silently install the app is DxSetup.exe /qb
If you are using my application launcher (If not, go and grab it, it will save you so much time!!!), create an MDT application using the following command:
Cscript.exe %ScriptRoot%\Install_Application.wsf /app:"DxSetup.exe" /arg:"/qb"
Setting up timing
Once the ProSet Dx is in place, we can start playing with the included PowerShell module.
In the first place we will collect all the onboarded Intel NICs that are be part of our teaming like this:
$NIC_colItems = Get-IntelNetAdapter|where OriginalDisplayName -like '*I350*'
The query is filtered with part of the card name in case the built-in network card was also from Intel.
Identifying each physical adapter is really straightforward: NICs in slot one should receive number 1 & 2 (Intel’s I350 have two NICs per cards), NICs in slot 2 will receive number 3 & 4 and so on…
With that in mind, it’s easy to build a teaming with the first card of each slot using a Foreach loop:
# Make teaming if we have at least two Network Adapter
If($NIC_colItems.Count -ge 2)
{
# Creating Teaming
$NIC_adapterstoteam = @()
$NIC_Nb=1
# Build the teaming with the first two adapters
Foreach ($item in $NIC_colItems[0,2])
{
# Rename each adapter from the new teaming
$NewName = ("TeamMember-" + ($NIC_Nb -as [string]))
Rename-NetAdapter -Name $Item.ConnectionName -NewName $NewName
$NIC_nb ++
}
}
As you’ve guessed, PowerShell object are starting from zero, so selecting NIC 1 and 3 must be done by requesting NIC 0 and 2: $NIC_colItems[0,2]
If you prefer to select the first two NICs, change the loop to $NIC_colItems[0..1]
To make our Teaming even more reliable, we will disable power saving on each cards:
# Disable Energy Efficient Ethernet
$NIC_colItems[0,2]|Get-IntelNetAdapterSetting -DisplayName "Energy Efficient Ethernet"|Set-IntelNetAdapterSetting -RegistryValue 0
To make our Teaming even more reliable, we will disable power saving on each cards:
Now that we have picked up some adapters, let’s glue them together under a new virtual adapter with a new IP address, our teaming is now alive:
# Build the Teaming
New-IntelNetTeam -TeamMembers $NIC_colItems[0,2] -TeamMode AdapterFaultTolerance -TeamName 'TheATeam'
Get-NetAdapter|where InterfaceDescription -like "TEAM: TheATeam"|Rename-NetAdapter -NewName 'The ATeam Super Teaming'
# Set Ip Address
$NIC_TeamIP = "192.168.100.1"
$NIC_TeamMK = "255.255.0.0"
$NIC_TeamGW = "192.168.100.254"
Invoke-Expression "netsh interface ip set address name="The ATeam Super Teaming" source=static addr=$($NIC_TeamIP) mask=$($NIC_TeamMK) gateway=$($NIC_TeamGW) gwmetric=0"
The teaming is now ready, you can also play with the other Intel’s PowerShell cmdlets or tweak your teaming within the virtual network adapter graphical user interface.
That’ll all for today, see ya !!