0
Function AdapterSwitcher {

While ($true) {

$Ethernet = Get-NetAdapter | where-object {$_.Status -contains "Up"} | Where-Object {$_.PhysicalMediaType -eq "802.3" -and {$_.Name -notlike "PANGP" }}
 if ($Ethernet -eq $null)
        {
        Write-Host "Ethernet Not Detected, Enabling WiFi"
            #When the value is null this means that there is no wired connection and the wireless must be enabled
            $WiFiNetadapter = get-netadapter | where-object {$_.Status -contains "Up"} | Where-Object {$_.PhysicalMediaType -eq "Native 802.11"} 
            $WiFiNetadapter | Enable-NetAdapter -Confirm:$false -Verbose


        }
        else
        {
        Write-Host "Disabling WiFi Network Adapter"
            #When the value is not null, the value consists of the object information about the Local Area Network Connection and
            #that the wireless connection needs to be disabled. 
            $WiFiNetadapter = get-netadapter | where-object {$_.Status -contains "Up"} | Where-Object {$_.PhysicalMediaType -eq "Native 802.11"} 
            $WiFiNetadapter | Disable-NetAdapter -Confirm:$false -Verbose }
            Start-Sleep -s 2
    }
        Start-Sleep -s 3
        }

            #Remove-Variable -Name WIRED -Force

AdapterSwitcher

When i run this script, even though the value of $ethernet is not $null, the script still returns the below so it goes to the else block when it shouldn't?

write-host "Disabling Network Adapter"

Could anybody tell me why? This doesn't make logical sense

3
  • Your if condition needs to change. It should be if ($null -eq $Ethernet). If $Ethernet always has data, then the else {} condition will always be true. Is the problem that you want to do the conditional evaluation for every network adapter? Your code is only checking once for the $Ethernet collection. Commented Jul 17, 2019 at 15:02
  • Possible duplicate of How to test for $null array in PowerShell Commented Jul 17, 2019 at 15:20
  • See also: github.com/PowerShell/PSScriptAnalyzer/issues/1021 Commented Jul 17, 2019 at 15:21

2 Answers 2

1

I am not sure what your While loop is doing, but your operators are all off. Look at the differences here...

    $Ethernet = Get-NetAdapter | Where-Object {($_.Status -eq "Up") -and ($_.PhysicalMediaType -eq "802.3") -and ($_.Name -ne "PANGP" )}

    if (!($Ethernet)) {

        #...do something

    }

You also appear to be trying to enable a Wifi adapter that already has a Status of 'Up'. If it's status is 'Up'...it is already enabled. Try this...

function AdapterSwitcher {

        $Ethernet = Get-NetAdapter | Where-Object {($_.Status -eq "Up") -and ($_.PhysicalMediaType -eq "802.3") -and ($_.Name -ne "PANGP" )}

            if (!($Ethernet)) {

                $wifi = Get-NetAdapter | Where-Object {$_.PhysicalMediaType -like '*802.11*'}

                Enable-NetAdapter -Name $wifi.Name -Confirm:$false

            else {Disable-NetAdapter -Name $wifi.Name -Confirm:$false

    }

}
Sign up to request clarification or add additional context in comments.

6 Comments

I'm afraid you're wrong, i'm not enabling a Wifi adapter that's up - the PhysicalMedia type is 802.3 which is ethernet, this script forces a machine to switch between either when docking or undocking so you can't have both EtherNet AND Wifi on at the same time.
Look a this line...$WiFiNetadapter = get-netadapter | where-object {$_.Status -contains "Up"} | Where-Object {$_.PhysicalMediaType -eq "Native 802.11"} $WiFiNetadapter | Enable-NetAdapter -Confirm:$false -Verbose.... you are definitely getting a network adapter that is already up and then enabling it. Your function that works, which you posted below, removed that criteria from assigning $WiFiNetadapter.
Ah, yeah, sorry - checked revised WORKING version i posted - fixed that!
@Royston yeah, I saw you fixed it. I also was not wrong, and I encourage you to look at the differences in our operators for getting $Ethernet as well. Thanks
@Royston Hey bub, no harm in spotting me the answer as I did fix your issue...and slightly before your edited post ;). Anyway glad it works!
|
0

This works:

Function AdapterSwitcher {

While ($true) {

    $Ethernet = Get-NetAdapter | where-object {$_.Status -contains "Up"} | Where-Object {$_.PhysicalMediaType -eq "802.3" -and {$_.Name -notlike "PANGP" }}
     if ($Ethernet -eq $null)
            {
            Write-Host "Ethernet Not Detected, Enabling WiFi"
                #When the value is null this means that there is no wired connection and the wireless must be enabled
                $WiFiNetadapter = get-netadapter | Where-Object {$_.PhysicalMediaType -eq "Native 802.11"} 
                $WiFiNetadapter | Enable-NetAdapter -Confirm:$false -Verbose


            }
            else
            {
            Write-Host "Disabling WiFi Network Adapter"
                #When the value is not null, the value consists of the object information about the Local Area Network Connection and
                #that the wireless connection needs to be disabled. 
                $WiFiNetadapter = get-netadapter | Where-Object {$_.PhysicalMediaType -eq "Native 802.11"} 
                $WiFiNetadapter | Disable-NetAdapter -Confirm:$false -Verbose }
                Start-Sleep -s 12
        }

            }

                #Remove-Variable -Name WIRED -Force

    AdapterSwitcher

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.