Script Reusability
I used the variable $Name in the script used in previous. After all, instead of these two lines:
$Name = "WinDefend"
Get-service | Select * | Where {$_.name -eq $Name }
Used just this line:
Get-service | Select * | Where {$_.name -eq "WinDefend }
The reason is for script reusability. Although this code was written for the Windows Defender service, it can easily be used for any service. The only thing that needs to change is the name of the service.
For example, if I wanted to use this for a different service, such as the Print Spooler service, I'd just need to identify the name of the Print Spooler service (Spooler) and put it in place of "WinDefend" in the $Name = "WinDefend" line as $Name = "Spooler".
It's even possible to use the Param command to allow the script to accept a parameter. In other words, I can name my script CheckService and program it to accept the name of a service as Param($svc). I could check the Windows Defender service with the command CheckService WinDefend or the Print Spooler service with the command CheckService Spooler.
To put it all together, I added a couple of extra touches to this script. This script checks to see if the service is running, and if so, it restarts it (which can sometimes be useful for services that hang, like the Print Spooler service). If the service is stopped, it will be started.
If it is paused, it'll be resumed.
Listing below shows it in full.
Check status of service
#Script written Sep 2009 by Mike Gibson #Purpose. Checks status of service. # Restarts if running, starts if stopped, # and resumes if paused. #Expects Display Name of service # as a parameter ($Name) Param($Name) $svc = Get-service | Select * | Where {$_.name -eq $Name} $status = $svc.status # Write-Host $svc.Name "service is" $status Switch ($Status) { "Running" {Restart-Service $Name } "Stopped" { Start-Service $Name } "Paused" { #Windows Defender can't be paused or resumed Resume-Service $Name } }
Notice the use of the Param command. Instead of hard-coding the name of the service, it accepts a parameter (such as WinDefend or Spooler). The Param command must be the very first executable line (comments can precede it). You would execute the script from PowerShell as
c:\scripts\CheckService.ps1 WinDefend
The script can also be called from other programs including Task Scheduler, as was shown with a batch file earlier in the tutorial.
However, you'll find that this script won't work completely unless you run it with elevated permissions. For example, if the Windows Defender service is running, the script will try to restart it but can't because it doesn't have permissions. Instead, launch the script from a PowerShell window with elevated permissions by selecting Run As Administrator or execute it with the System account when executed from a program such as Task Scheduler.
Well, that's a taste of Windows PowerShell. Don't expect to walk away with a full understanding of everything that can be done with PowerShell. However, if you come across any PowerShell commands or scripts, they should make a little more sense to you.
In this tutorial:
- Working with the Command Prompt
- Starting and Ending a Command Prompt Session
- Easy ways to invoke administrator Command Prompt sessions
- Starting Command Prompt at a Particular Folder
- Strings with Spaces Need Quotes
- Cmd.exe vs. Command.com
- Commands Are Not Case Sensitive
- Starting Command Prompt and Running a Command
- Cmd.exe and Other Command Prompts
- Using AutoRun to Execute Commands When Command Prompt Starts
- Using Cmds Command-Line Syntax
- Using Commands
- Type /? for help
- Starting Programs
- Open Windows Explorer at the current Command Prompt folder
- Using File-Name and Folder-Name Completion
- Use a different completion character
- Using Wildcards
- Editing the Command Line
- Using Command Symbols
- The Redirection Symbols
- The Pipe Symbol
- The Command Combination Symbols
- Pausing or Canceling Commands
- Simplifying Command Entry with Doskey Macros
- DOSKEY Saves Typing
- System Variables Identify the Environment
- Viewing Environment Variables
- Modifying Environment Variables
- Predefined Environment Variables
- Customizing Command Prompt Windows
- Setting the Window Size and Position
- Setting the Window Size and Position Visually
- Selecting a Font
- Setting Colors
- Setting Other Options
- Copy and paste in the command prompt window
- Navigating from the command prompt
- Printing a list of filenames
- Commands Use Paths
- Identifying Executables
- Modifying the Path to Executables
- Modifying the Path with the GUI
- Changing the Current Path with CD
- Changing the Current Path with Windows Explorer
- Capturing the Output
- A Sampling of Commands
- Dir
- Copy
- XCopy
- SET
- NET USE
- SystemInfo
- DriverQuery
- Echo
- Advanced Shell Commands
- Creating a Batch File
- Scheduling a Batch File
- Creating Scheduled Tasks with a Script
- Using Windows PowerShell and the PowerShell ISE
- Windows PowerShell ISE
- PowerShell Commands
- Verbs and Nouns
- Sending Output to a Text File
- PowerShell Syntax
- Variables Created with a $ Symbol
- Comparison Operators
- Parentheses, Brackets, and Braces
- Running PowerShell Scripts
- PowerShell Execution Policy
- Changing the Execution Policy
- Looping
- Collections
- Creating a PowerShell Script
- Documenting Scripts
- Using PowerShell Commands
- Getting Help on PowerShell
- Using WMI_Cmdlets
- Getting Details on an Object
- Querying Information on Specific Objects
- Terminate Applications with Win32_process
- Formatting Output with the -f Format Operator
- Filtering the Output with the Where-Object Command
- Using the IF statement
- Using the Switch Statement
- Script Reusability