Neemobeer

Cloud Security Engineer
Staff member
Joined
Jul 4, 2015
Messages
8,974
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
}
 


Solution
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
 }
Hi @Neemobeer Very good theory; but I must confess, way over this old country boys pay grade.
I'm sure we have some members here that can use this switcher.;):worship:
 


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
 


The foreach loop is needed to iterate through all the adapters
 


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
 }
 


Solution
This is old code anyways it doesn't work like this anymore
 


Back
Top