Monthly Archive

Categories

PowerShell if

The PowerShell if statement enables you to branch your code depending in the results of one or more conditional tests. The tests can be anything you need but must produce a boolean – true/false – result. Also 0 is treated as $false and a positive non-zero is $true. A negative non-zero generates an error.

 

The syntax fro an if statement is

if (<test>){<statement list>}
elseif (<test>){<statement list>}
else {<statement list>}

 

You can have as many elseif sections as required. Note that the tests and statement lists are independent in each section.

As an example of an if statement in use:

$x = 7

if ($x -gt 9){"`$x more than 9 : $x"}
elseif ($x -gt 6){"`$x more than 6 : $x"}
elseif ($x -gt 3){"`$x more than 3 : $x"}
else {"`$x less than 3 : $x"}

 

Very often you’ll not be using elseif

$x = 7
if ($x -gt 5){"`$x more than 5 : $x"}
else {"`$x less than 5 : $x"}

 

If $x = 5 you’ll get a slightly misleading message so may be better to do this

$x = 5
if ($x -ge 5){"`$x more or equal to 5 : $x"}
else {"`$x less than 5 : $x"}

 

I often see code like this for testing boolean values

$x = $true
if ($x -eq $true){"`$x is true"}
else {"`$x is false"}

 

You don’t need to explicitly test in this case

$x = $true
if ($x){"`$x is true"}
else {"`$x is false"}

 

The variable will be true or false so just need the variable

$x = $null
if ($x){"`$x is true"}
else {"`$x is false"}

If a variable is $null then you’ll your test will return false.

 

You should always try to test a positive rather than a negative. So

$x = $true
if ($x){"`$x is true"}
else {"`$x is false"}

rather than

$x = $true
if (-not $x){"`$x is false"}
else {"`$x is true"}

Double or triple or more negatives will make your head explode.

 

You can also perform multiple tests simultaneously

$x = 7
if (($x -gt 8) -or ($x -eq 7)) {"`$x is high : $x"}
else {"`$x is low : $x"}

$x = 7
if (($x -lt 10) -and ($x -ge 7)) {"`$x is high : $x"}
else {"`$x is low : $x"}

In both cases the result is:

$x is high : 7

You don’t need the () round each test but I find it helps when debugging as the code is more readable.

For the –or scenario EITHER test must evaluate to $true and for the –and scenario BOTH scenarios must evaluate to $true

 

The else statement is the default if the if and elseif tests all fail.

If you find your self using a number of elseif statements a switch is most likely a better code structure.

Comments are closed.