Zachary Mull
Zachary Mull

Reputation: 63

Powershell - only if statement executes despite input

I'm trying to start my Powershell portfolio with and easy script that calculates Network ID or BroadcastID depending on input from the user. That being said, I can only get my if statement to run. I am unsure what I am missing here. I have tried searching this as I know I cannot be the only one to have this issue, but I am unable to find it. Any education on my error would be appreciated as it seems like a basic flaw.

Thanks!

#prompt for IP and subnet mask
$ip = Read-Host -Prompt "Enter your IP address"
$mask = Read-Host - Prompt "Enter your subnet mask"
[String]$UserDecision = Read-Host -Prompt "Enter N if you would like to calculate your Network ID or B if you would like to calculate your Broadcast address."
    
$splitmask=$mask.split(".")
    
$wildcard="$(255 - $splitmask[0]).$(255 - $splitmask[1]).$(255 - $splitmask[2]).$(255 - $splitmask[3])"
    
# ip and mask variable to ip addresses
    
$ip = [ipaddress] $ip
    
$mask = [ipaddress] $mask
    
#determine networkID
    
function CalculateNetID {

    $networkID = [ipaddress] ($ip.Address -band $mask.Address)
    
    #print NetworkID to console
    echo "The Network id is $($networkID.IPAddressToString)"
}  
    
function CalculateBroadcastID {
    
    $networkID = [ipaddress] ($ip.Address -band $mask.Address)

    #convert wildcard to IP addresses
    $wildcard= [ipaddress] $wildcard    
    
    $broadcast = [ipaddress] $($wildcard.Address -bor $NetworkID.Address)
    
    #print broadcast to console
    echo "The Broadcast id is $broadcast"
}
    
if ($UserDecision -eq "N" -or "n"){
    CalculateNetID
}    
elseif($UserDecision -eq "B" -or "b"){
    CalculateBroadcastID
}
else{
    echo "Please retry and enter the character associated with the ID you would like to calculate"
}

Upvotes: 1

Views: 138

Answers (1)

Santiago Squarzon
Santiago Squarzon

Reputation: 59781

Here is your problem:

$false -or 'n' # => True

As you can see, this is what's happening in your first if statement, the correct syntax for your condition should be:

if($UserDecision -eq "N" -or $UserDecision -eq "n") {

Same thing applies for the elseif.

Note that, PowerShell comparison operators are not case-sensitive by default, so the -or conditions could be just removed:

if($UserDecision -eq "n") {

You might also want to consider using a switch statement instead of chained if, elseif, else:

switch($UserDecision) {
    N { CalculateNetID }
    B { CalculateBroadcastID }
    Default {
        "Please retry and enter the character associated with the ID you would like to calculate"
    }
}

Upvotes: 4

Related Questions