Introduction to The Windows PowerShell If Statement
PowerShell's 'If' statement comes under the umbrella of flow control. Once you master the basic construction then you can increase
its usefulness by appending, 'Else' and 'ElseIf' statements. One of
my favourite
alternatives is to use 'Switch'.
As with so many PowerShell constructions, the type of bracket signifies how to break the script into sections.
It is worth emphasising that (parenthesis are for the first part, namely the condition), while {braces are for the block command}.
If (condition) {Do stuff} # Another explanation would be If
(test) { "Execute when true" }
Summary: The PowerShell 'If' conditionally executes a statements,
depending on the truth of the test expression.
# PowerShell If Statement Simple Example $Number = 10
If ($Number -gt 0) {"Bigger than zero"}
Learning Points
Note 1: Trace the construction, and separate into
two components: if (test) and {what to do}.
Note 2: Avoid over-think; there is no 'Then' in
a PowerShell 'If'
statement. My advice is that instead of worrying about 'If Then', pay close attention to the two types of bracket.
Furthermore, there is no endif in PowerShell as there is in VBScript.
Note 3: To double check your understanding, try amending, "Bigger than Zero" to a different text
string, such as: "Less than nought". Once you have done that, set $Number to -1.
Example 1b PowerShell Script to Checks If a File Exists
# Windows PowerShell example to check 'If File Exists' $ChkFile = "C:\Windows\explorer.exe"
$FileExists = Test-Path $ChkFile If ($FileExists -eq
$True) { Write-Host "Yippee" }
Note 4: You probably want to change the file
referenced by $ChkFile. Indeed, the script cries out to
modified for a more constructive {outcome}.
Note 5: You could easily append an else statement to
cater for file not exist. Else {Write-Host "File not exist"}
Windows Management Instrumentation (WMI) is one of the hidden
treasures of Microsoft's operating systems. Fortunately, SolarWinds
have created a
Free WMI Monitor so that you can discover these gems of performance
information, and thus improve your PowerShell scripts.
Take the guess work out of which WMI counters to use when scripting the
operating system, Active Directory, or Exchange Server. Give this WMI monitor a
try - it's free.
It's rare that my first 'If' construction produces the desired results.
The secret of success is to experiment with the If test, or alternatively
start introducing one or more 'ElseIf tests with their corresponding
{outcome block}.
In this example I have introduce -Not into the logic:
Example 1b PowerShell If
-Not Statement to Check for a Service
# PowerShell script to check whether a service is installed Clear-Host
$Name = "Alerter" $Service = Get-Service -display $Name -ErrorAction
SilentlyContinue if (-Not $Service) { $Name + " is
not installed on this computer." }
Note 6: This script uses the Display Name property of
the service. Remember in PowerShell 'If Then' does not exist.
Observe it's plain 'If'.
Note 7: Observe in passing the If -Not construction,
which is sometimes abbreviated to an exclamation mark ! in PowerShell.
Note 8: This script cries out for an Else statement.
We need to know if the named service has been installed.
# PowerShell If statement to check whether a service is installed Clear-Host
$Name = "Print Spooler" $Service = Get-Service -display $Name -ErrorAction
SilentlyContinue if (-Not $Service) {$Name + " is
not installed on this computer."} else {$Name + " is
installed." $Name + "'s status is: " + $service.Status }
Example 1c PowerShell If Statement To Check IP Addresses
Here is another real-life example of the 'If statement'. The idea is to
ping 20 IP Addresses. The logic says If the StatusCode is 0, then
display a label saying 'ON NETWORK'.
# PowerShell If Statement To Test Ip Addresses $i =1 $Ip =
"192.168.1." Write-Host "IP Address"
Write-Host
"----------------------------------------" Do { $Ip4th = $Ip + $i
$Pingy = Get-WmiObject Win32_PingStatus -f "Address='$Ip4th'" if($Pingy.StatusCode
-eq 0) { "{0,0} {1,5} {2,5}" -f $Pingy.Address, $Pingy.StatusCode,"
ON NETWORK"} else {"{0,0} {1,5} {2,5}" -f $Pingy.Address,
$Pingy.StatusCode, " xxxxxxxxx" } $i++
} until ($i -eq 20)
PowerShell has a batch of help files. One of these files contains help about the 'if' statement. In the example below,
$File references that file. $Content is set to the content of
the file. The third line attempts to match a string to the contents of the file.
# Help on PowerShell's if statements Clear-Host $File = Get-Help about_if
If ($File -Match "The if Statement") { "We have the correct help
file" }
Learning Points
The above example is concerned with matching a string "The if Statement" to the contents of
the built in help file.
Guy Recommends: A Free Trial of the Network Performance Monitor
(NPM)
SolarWinds'
Network Performance Monitor
will help you discover what's happening on your network. This
utility will also guide you through troubleshooting; the dashboard will
indicate whether the root cause is a broken link, faulty equipment or
resource overload.
What I like best is the way NPM suggests solutions to network
problems. Its also has the ability to monitor the health of individual VMware
virtual machines. If you are interested in troubleshooting, and creating
network maps, then I recommend that you try NPM now.
This example deal with plain 'Else'. This is a simple command,
unlike ElseIf there is no second test construction, 'Else' just follows on
to reflect what to do if the If statement is false.
# Help on PowerShell's Else statements $File = Get-Help about_if If
($File -Match "The if Statement") {"We have the correct help file"} Else
{"The string is wrong"}
Learning Points
The best way to see how 'else' operates is to amend line 3 thus:
($File -Match "The ifyyyy Statement").
Example 2b Checking If a Service Has Been Installed
# PowerShell script to check whether a service is installed Clear-Host
$Name = "Print Spooler" $Service = Get-Service -display $Name -ErrorAction
SilentlyContinue If (-Not $Service) {$Name + " is not installed on
this computer."} else {$Name + " is installed."
$Name + "'s status is: " + $service.Status }
The purpose of this script is to employ -Not logic to check for the
Alerter service. Once scenario is you are working with Windows 7
machines, and they no longer install this service.
Observe how -Not reverses the 'If' logic compared with
Example 1.
# PowerShell script to check if a service is -NOT installed
$Name = "Alerter" $Service = Get-Service -display $Name
-ErrorAction SilentlyContinue If (-Not $Service)
{$Name + " is not installed on this computer."} Else {"You
probably have $Name, thus machine is Vista or W2K3"}
# PowerShell ElseIf Example Using NetSh Clear-Host Write-Host "Firewall configuration for $env:computername"
$Fw = netsh firewall set opmode enable $Fw if($Fw -Match
'ok'){Write-Host "$env:username's job is done"} ElseIf($Fw -Match
'requires elevation') {Write-Host "Call for an administrator"}
else{Write-Host "Nothing happened"} netsh firewall show opmode
Guy Recommends: SolarWinds' Free Bulk Import Tool
Import users from a spreadsheet. Just provide a list of the
users with their fields in the top row, and save as .csv file.
Then launch this FREE utility and match your fields with AD's
attributes, click and import the users.
This example has a real task, and that is to check that we have the name of an actual file.
Remember the second (test statement) followed by a second {Block Script}.
# Help on PowerShell's ElseIf statements $File = Get-Help about_if if ($File -Match "The if Statement") {"We have the correct help file"}
ElseIf ($File.Length -lt 1) {"Check file location"} Else {"File
exists, but does not contain text string"}
Note 12: The advantage of ElseIf over plain Else, is that we can introduce a new test. In the above example we use ElseIf to check if the length of the file is less than 1. To activate the 'ElseIf' block, set
$File to a non-existent file for example $File = Get-Help about_ifxx.
Note 13: To trigger the final 'Else', try changing:
$File = Get-Help about_if to $File = Get-Help about_scope
If you have time, you could add more 'ElseIf' statements to cater for other eventualities.
Alternatively, if the ElseIf construction is getting unwieldy, then try
the superior switch command.
Guy Recommends: SolarWinds Engineer's Toolset v10
This
Engineer's Toolset v10 provides a comprehensive console of 50 utilities
for troubleshooting computer problems. Guy says it helps me
monitor what's occurring on the network, and each tool teaches me more about how the
underlying system operates.
There are so many good gadgets; it's like having free rein of a
sweetshop. Thankfully the utilities are displayed logically: monitoring,
network discovery, diagnostic, and Cisco tools. Try the SolarWinds Engineer's Toolset now!
If you would another account of PowerShell's If statement, then have a
look at the built-In help file
# For even more information about 'If' and 'ElseIf'
constructions:
Get-Help about_If
This is Microsoft's explanation:
if (<test1>) {<statement list 1>} [elseif (<test2>)
{<statement list 2>}] [else {<statement list 3>}]
Windows PowerShell evaluates the <test1> conditional expression as
either true or false. Should the result be true, PowerShell obeys whatever
is inside the {curly brackets}, whereupon PowerShell exits the If
statement.
In the event of the first test being false PowerShell works its way
through the ElseIf statements.
Incidentally, the 'Vehicle' for our tests reveals a whole family of 'about_zyx...' files. My point is there is no command: 'Get-Help if',
but there is a help file called, 'about_if'. Furthermore, if you look in the PowerShell directory then you will see 'About'
files to assist with commands such as 'If' and 'ElseIf'. You can list
these 'About' files with the command:
When it comes to filtering output, one of the oldest and best statements is the 'If' clause. As usual, the secret of understanding the syntax is to pay close attention to the style bracket. If (parenthesis for
the test) and {braces for the action}. Once you have mastered the basic 'If' statement, then extend your capabilities by researching 'Else' and 'ElseIf'.
If you like this page then please share it with your friends
Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.
Windows Management Instrumentation (WMI) is
most useful for PowerShell scripting.
SolarWinds
have produced this
Free WMI Monitor to take the guess work out of which
WMI counters to use for applications like Microsoft Active Directory,
SQL or Exchange Server.