Introduction to PowerShell’s If -Or Logic
The easiest way to understand PowerShell’s ‘If -or’ construction is to master the basic ‘If’ construction then add ‘-or’ to the test a second piece of logic.
Topics for PowerShell’s If -Or Conditional Operator
- Begin With The Plain ‘If’ Statement
- Example 1: Basic PowerShell ‘If’ Statement
- Example 2: PowerShell If -Or
- Example 3: PowerShell -Or Working Example
- Example 4: PowerShell If And Script
- Example 5: PowerShell ElseIf
- PowerShell If -And
PowerShell’s Basic ‘If’ Statement
Let us get started by mastering PowerShell’s ‘If’ construction. Focus on the two parts of the construction: (test) and {block command}.
It helps to keep one eye on PowerShell’s different types of bracket. (The parenthesis style of bracket are used for the first part, namely the condition), while {braces are for the block command payload}.
If (condition) {Do stuff}
Here is a different explanation of the same ‘If’ flow control:
If (test) {execute when true}
Summary: The PowerShell ‘If’ conditionally executes a block statement, providing the test expression is true.
PowerShell ‘If -or’ Statement
The only difference compared with the basic example is we have a second test introduced by -or. The key point is that both tests are held between the same parentheses.
If (test1 -Or test2) {execute when true}
Example 1: Basic PowerShell ‘If’ Syntax
The purpose of this script is to check the underlying ‘If’ command. Hour vehicle is the startup value for the Spooler service. If it is set to Manual, then the script changes it to Automatic.
# PowerShell Script to change Startup to Automatic Clear-Host $NameSrv = 'Spooler' $Service = Get-WmiObject win32_service -filter "NAME = '$NameSrv'" If ($Service.Startmode -eq "Manual") { Set-Service $NameSrv -startuptype Automatic } $Service = Get-WmiObject win32_service -filter "NAME = '$NameSrv' " $Service | Ft Name, Startmode -AutoSize
Learning Points
Note 1: At the heart of this example is a test ($Service.Startmode -eq “Manual”) and a block command {Set-Service $NameSrv -startuptype Automatic }
Note 2: Test the script by changing the startuptype for Spooler to Manual. Either manually from the Services.msc or by running this PowerShell command:
Set-Service Spooler -startupType manual
Guy Recommends: Free WMI Monitor for PowerShell (FREE TOOL)![Solarwinds Free WMI Monitor for PowerShell](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDUiIGhlaWdodD0iMTQyIiB2aWV3Qm94PSIwIDAgMjA1IDE0MiI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=)
Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft’s operating systems. Fortunately, SolarWinds have created a Free WMI Monitor for PowerShell so that you can discover these gems of performance information, and thus improve your PowerShell scripts.
Take the guesswork 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.
Example 2: PowerShell If -Or Conitional Operator
A scripting challenge occurs when you cater for the very real possibility that the service is set to ‘Manual’, or to ‘Disabled’. You could solve this in PowerShell with ElseIf, alternatively, as in this example below, you could use -Or.
Clear-Host $NameSrv = 'Spooler' If ($Service.Startmode -eq "Manual" -Or $Service.Startmode -eq "Disabled") { Set-Service $NameSrv -startuptype Automatic } $Service = Get-WmiObject win32_service -filter "NAME = '$NameSrv' " $Service | Ft Name, Startmode -AutoSize
Note 3: Do check the logic of each line. -eq is PowerShell’s way of saying equals; learn when to employ -eq and when to use the (=) sign.
Note 4: The benefit of employing -Or rather than ElseIf is writing tighter code. This realization will prompt you to place the -Or inside the (test) parenthesis rather than create an extra line with a while new logical condition.
Example 3: PowerShell -Or Working Example
While this script is designed to test the tiny ‘-Or’ syntax, it has lots of extraneous code which changes the startupType to manual. The sole purpose of this convoluted layout is so that you can change bits to double-check the logic and that you understand how -Or works in PowerShell.
Clear-Host $NameSrv = 'Spooler' Set-Service $NameSrv -startupType manual $Service = Get-WmiObject win32_service -filter "NAME = '$NameSrv'" $Service | Ft Name, Startmode if ($Service.Startmode -eq "Manual" -Or $Service.Startmode -eq "Disabled") { Set-Service $NameSrv -startuptype Automatic } $Service = Get-WmiObject win32_service -filter "NAME = '$NameSrv' " $Service | Ft Name, Startmode
Production script:
In real life you may want to strip the code down, and append a command to actually start the spooler service.
$Service = Get-WmiObject win32_service -filter "NAME = 'Spooler'" if ($Service.Startmode -eq "Manual" -Or $Service.Startmode -eq "Disabled") { Set-Service 'Spooler' -startuptype Automatic } Start-Service 'Spooler'
Note 5: It’s always difficult to get the balance between example scripts that illustrate a point, and those that do useful work.
Guy Recommends: Network Performance Monitor (FREE TRIAL)![Review of Orion NPM v11.5](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzQiIGhlaWdodD0iMTY5IiB2aWV3Qm94PSIwIDAgMjc0IDE2OSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=)
SolarWinds Network Performance Monitor (NPM) 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 on a 30-day free trial.
Multiple PowerShell -Or Conditions
Once your flow control works with one -Or, it’s relatively simple to append more -Or conditions. Just remember that you only need one set of (parenthesis brackets).
Example 4: PowerShell If -And Script
PowerShell’s -And follows the same logic and construction as -Or
The purpose of this script is merely to test different dates and compare them with today’s date, which is held by the variable $Calendar.
Clear-Host $Calendar = Get-Date If ($Calendar.day -eq '24' -And $Calendar.Month -eq '12') {"Christmas Day"} ElseIf ($Calendar.day -eq '4' -And $Calendar.Month -eq '7') {"4th of July"} Else {"Today is not Christmas or the 4th of July"}
Note 4: Pay close attention to the (first parenthesis). In particular find the two tests .day -eq ’24’, also .Month -eq ’12. My first point is they are separated by -And. My second point is there is only one set of (condition brackets).
Note 5: I included a few ElseIfs and a final Else statement to give the script a little more context and to give you ideas for your scripts.
Example 5: PowerShell ElseIf
While the PowerShell -or solution is more elegant, you could employ ElseIf instead.
Clear-Host $NameSrv = 'Spooler' $Service = Get-WmiObject win32_service -filter "NAME = '$NameSrv'" if ($Service.Startmode -eq "Manual") {Set-Service $NameSrv -startuptype Automatic } ElseIf ($Service.Startmode -eq "Disabled") {Set-Service $NameSrv -startuptype Automatic } $Service = Get-WmiObject win32_service -filter "NAME = '$NameSrv' " $Service | Ft Name, Startmode -auto
Researching PowerShell’s Else If Logic
For more information refer to PowerShell’s built-in About_IF file
Get-Help About_If
Get more help on PowerShell’s About_ files »
Summary of PowerShell’s If -Or Construction
Once you have mastered the basic If statement, you can extend its capabilities with If -Or. This an alternative construction to ‘ElseIf’. The secret of understanding PowerShell’s implementation of If -Or is to pay close attention to the brackets. (test1 -or test2) then {braces for the script block}.
If you like this page then please share it with your friends
See more Windows PowerShell flow control examples
• PowerShell Continue Statement • PowerShell If Statement • PowerShell ElseIf • PowerShell Else
• PowerShell Comparison Operators • PowerShell If -And • PowerShell If -Or • PowerShell If -Not
• Conditional Operators • Where Filter • PowerShell Real-life Techniques • PowerShell Home
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.