Windows 7 Powershell LAN/WLAN Switcher

Neemobeer

Cloud Security Engineer
Staff member
Many times people may have both their wireless NIC and wired NIC connected at the same time. This can create a bridge and cause your network performance to degrade. Here is a powershell script that could be setup as a scheduled task to run at start up. What it does it detect if the wired nic is connected and if so it will disable the wireless connections. The -Filter parameters may need to be tweaked to match your network adapter names though.

Code:
Function Get-WiredStatus
{
    $nics = Get-WmiObject -Class Win32_NetworkAdapter -Filter "Name LIKE '%Ethernet%'"
    ForEach ($nic In $nics)
    {
        If ($nic.NetConnectionStatus -eq 2)
        {
            Disable-WirelessConnection
            break
        }
        Else
        {
            Enable-WirelessConnection
            break
        }
    }
}

Function Disable-WirelessConnection
{
    $nics = Get-WmiObject -Class Win32_NetworkAdapter -Filter "Name LIKE '%Wireless%'"
    ForEach ($nic In $nics)
    {
        $nic.Disable() >> $null
    }
    $nics.Dispose()  
}

Function Enable-WirelessConnection
{
    $nics = Get-WmiObject -Class Win32_NetworkAdapter -Filter "Name LIKE '%Wireless%'"
    ForEach ($nic In $nics)
    {
        $nic.Enable() >> $null
    }  
    $nics.Dispose()
}

While($true)
{
    Get-WiredStatus
    Start-Sleep -Seconds 5
}
 
I don't think that the for loop is necessary if both code path's break from it in the first iteration of your first function. Not a bad idea though, but sometimes I like to have multiple networks
 
Code:
ForEach ($nic In $nics)
{
    If ($nic.NetConnectionStatus -eq 2)
    {
        Disable-WirelessConnection
        break  <----
    }
    Else
    {
        Enable-WirelessConnection
        break <----
    }
}

It won't iterate through all of them though because of the break statements. Look at your logic. The if statement tests for a specific condition and if true, breaks, otherwise if the first iteration evaluation is false, the else block still breaks from the foreach loop.

Try this:
Code:
foreach ($num in 1,2,3,4,5) {
  write-output $num
  break
 }
 
Back
Top