Guy recommends :
Free SolarWinds
VM Console

Solarwinds VM Console Free Download

Find out which of your VMs are a waste of space and which VMs need more resources.



Windows PowerShell Select-String

Introduction to Windows PowerShell Select-String

Select-String not only opens a file, but also checks for a word, a phrase, or in fact any pattern match.  If you have used -pattern to make changes PowerShell also tidies up and closes the file automatically.

Topics for PowerShell Select-String

 ♣

Introduction to: Select-String

The first objective is to set the -pattern parameter, which defines the string we are seeking.  Next comes the -path parameter, and as its name indicates, -path directs select-string to the file's location.

As you are reading this introduction, I expect you are thinking of possible applications for this select-string construction.  Perhaps you wish to discover which documents contain a particular word?  Alternatively, you may be seeking a more complex search-and-replace operation.  My point is that while select-string may be a bit-part in a bigger drama, you still need to master its syntax and switches.

Example 1 Select-String -path -pattern

The key to understanding select-String is focussing on the two main switches -path and -pattern.  They say to me, 'Where is the input?' and, 'What pattern do you want to match?'.

To ensure that my examples work on your machine, you and I need to agree on the file location and the pattern to search.  To follow my examples successfully you need to embrace one of two tactics, either mimic my folder structure and patterns, or amend my script to fit in with your environment.

My folder happens to be called : D: \powershell\stuff.  These days I operate with the ISE version of PowerShell v 2.0.  Previously I navigated in PowerShell to the folder where I stored the files with the cmdlet examples that I am testing.  Then I just issue the .\filename command (.Dot slash followed by the name of cmdlet which stores the PowerShell instructions).

Here are three simple scripts which all produce the same result, but each employs a slightly different method.  By studying all three you will gain both perspective and ideas for the best method to use in your scripts.

Assumptions:
You have a file called gopher.txt. 
In gopher.txt is the word Guido.

Example 1a Select-String

Instructions

  1. Let us create the appropriate file in the appropriate folder, for example gopher.txt in D:\powershell\stuff.
  2. Put the word that you wish to search for in gopher.txt.  My word, is 'Guido', and you can see that in the script it comes directly after the -pattern parameter.
  3. Type this one line at the PowerShell command line:

select-string -pattern "Guido" -path "D:\powershell\stuff\gopher.txt"

Note 1: Look closely at the dashes '-' PowerShell's verb-noun (select-string) pair are joined by a dash with no spaces.  The parameters -path and -pattern are introduced by a space dash then the parameter itself.

Example 1b Select-String Using the Variable $Location

This example is more complicated in that we are going to create a cmdlet, copy and paste the code below, then execute the cmdlet from inside PowerShell.

  1. Copy the cmdlet, then paste it into notepad, remember to save with a .ps1 extension,
    for example: selectstr.ps1. 
  2. Then I navigate in PowerShell to the folder where I saved the file, for example D: \powershell\stuff
  3. Issue the command .\selectstr
  4. If all else fails copy and paste the two lines into the PowerShell command line, then press 'Enter'.

# PowerShell cmdlet to find the pattern Guido
$Location = "D:\powershell\stuff\gopher.txt"
select-string -pattern "Guido" -path $Location

Expected outcome:
D:\powershell\stuff\gopher.txt:3:Guido is king

:3:  Means line number 3
:Guido is king  Refers to the line where the Pattern "Guido" occurs.

Guy Recommends: WMI Monitor and It's Free!Solarwinds Free WMI Monitor

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft 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.

Download your free copy of WMI Monitor

Example 1c Select-String (Wildcards *.*)

It is often useful to search a batch of files.  The simplest method is to use the famous * or *.* wildcard.

Instructions are the same as for example 1a

# PowerShell cmdlet to find the pattern Guido.  Note wildcard *
select-string -pattern "Guido"  -path "D:\powershell\stuff\*.*"

Example 1d Select-String (Guy's indulgence)

My main idea in Example 1c is to introduce an If... Else clause to cater for instances where the -pattern cannot be found.  To prepare for the 'If' logic I have introduced another variable called $SearchStr.  The second time you run this script you may wish to find and amend the "zzz" to a value that will ensure success.  If you accept my challenge then you can compare the outcome of the 'If' clause with the outcome of the 'Else' clause.

Instructions are the same as for example 1a

# PowerShell cmdlet to find the pattern zzz.
$Location = "D:\powershell\stuff\gopher.txt"
$SearchStr = "zzz"
$Sel = select-string  -pattern $SearchStr -path $Location
If ($Sel -eq $null)
{
    write-host "$Location does not contain $SearchStr"
}
Else
{
    write-host "Found `n$Sel"
}

Write-host "end"

Note 2:  Let us study the 'If' test: If ($Sel -eq $null)  What this says if the value returned by Select-String is nothing ($Null).  Incidentally, there are two lls in $null.  Also, the correct syntax is -eq and not plain old =.

Note 3: The purpose of `n is to force a carriage return.

Note 4: Once the script runs successfully, amend $SearchStr ="zzz" to a string that exists in your document.

Guy Recommends:  SolarWinds' Free Bulk Import ToolFree Download of Solarwinds  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 to import the users.  Optionally, you can provide the name of the OU where the new accounts will be born.

There are also two bonus tools in this free download, and all 3 have been approved by Microsoft:

  1. Bulk-import new users into Active Directory.
  2. Seek and zap unwanted user accounts.
  3. Find inactive computers.

Download your FREE bulk import tool.

Footnote - More parameters:

In addition to -pattern and -path, select-string has more parameters; -include and -exclude which are useful for fine tuning the files to be searched.  There is also the -caseSensitive switch to control uppercase and lowercase in the -pattern.  Select-String, like most PowerShell commands, is not case sensitive by default, hence the -caseSensitive parameter.

See more about PowerShell Parameters

Traps with Select-String

The biggest trap with all PowerShell's file handling commands is 'overthink' By that I mean wasting time lookinging for open-file or save-file commands, which simply don't exist.  What happens is that PowerShell opens, closes and saves files automatically.

A Real-life Example of Select-String

My practical problem was that I wanted to search for instances a particular string in a directory with hundreds of file.  If a file had duplicate entries, then I needed to know.

The PowerShell problem is how to create a stream of the files, then compare each file with my string value.  In the output I needed to know the filename.

To solve the problem, I employed four main commands, which you can see in the following script:

  1. Get-ChildItem - recurse
  2. foreach (loop) {what to do block}
  3. if (test) {output block}
  4. select-String -pattern to match my string value.

# A real-life example of PowerShell's Select-String
$i=0
$File = Get-ChildItem "H:\sports" -include *.htm -recurse
$StringVid = "themesguy/google"
foreach ($Entry in $File) {
   $List = select-string -pattern $StringVid $Entry
      if ($List.LongLength -gt 1) {
      "{0,-8} {1,-4} {2,18}" -f
      "Files ", $List.LongLength, $Entry.FullName;
      $i++
      }
}

Learning Point

Note 5:  If you want to get the above script to work, focus on the $File and $StringVid variables.  Specifically change their values to match your file location and search pattern.

Note 6: To find out more about the -f formatting switch consult SN4 in the Syntax section.

Guy Recommends: A Free Wake-On-LAN UtilitySolarwinds Wake-On-LAN

Encouraging computers to sleep when not in use is a great idea - until you are away from your desk and need a file on that remote sleeping machine!

Wake-On-LAN really will save you that long walk to awaken a hibernating machine; however my reason for encouraging you to download this utility is just because it's so much fun sending those 'Magic Packets'.  As Wake-On-LAN (WOL) is free, see if I am right, and you get a kick from arousing those sleeping machines.  WOL also has business uses for example, wakening machines so that they can have their patches applied. 

Download your free copy of Wake-On-LAN

Example of Select-String Kindly Sent by trebboR

# A real-life example of PowerShell's Select-String
# Makes a test.txt file with testcontent
"0123456789abcdefghijklmnopqrstuvwxyz`
ABCDEFGHIJKLMNOPQRSTUVWXYZZYXWVUTSRQPONMLKJIHGFEDCBA`
zyxwvutsrqponmlkjihgfedcba9876543210" >> "C:\test3.txt"
# read file into $a
$a = Get-Content "C:\test3.txt"
#$a
# Check what you want
$a.Contains("zz") #False
$a.Contains("ZZ") #True
$a.IndexOf("ZZ") # 61
#-=[trebboR.EU]=-

Further Research on PowerShell's Select-String

Clear-Host
help Select-String -full

If found these the most useful Select-String parameters -Include, -Context and -NotMatch.  I have found -Exclude disappointing, particularly in PowerShell v 1.0.

Select-String -Context

# PowerShell Select-String -Context
$FilePath = ""D:\powershell\stuff\*.*
select-string -pattern "Guido"  -path $FilePath -context 3

Note 7: This returns 3 lines either side of the pattern Guido, just so that you can see which of multiple results you is most interesting.  One use of this technique is troubleshooting eventlogs.

Sister Cmdlet - Out-String

The only other cmdlet with the noun string is: Out-String.

Summary of PowerShell's Select-String

Select-String is a useful instruction for opening files, and then searching their contents for the phrase specified by the -pattern parameter.  My advice is to get into the rhythm of the command: for example: verb-noun then -parameter.  For example: Select-String -path -pattern. As expected, you can use wildcards in the path.

Once you have mastered the basic construction look real life tasks where you can employ this technique to find words or phrases that are hiding somewhere within your files.

If you like this page then please share it with your friends

 


See more PowerShell examples for syntax constructions

PowerShell Tutorials  • Syntax  • Pipeline  • Quotes  • New-Item  • Remove-Item  • ItemProperty

Select-String  • -replace string  • Group-Object  • Sort-Object 

Windows PowerShell cmdlets   • Windows PowerShell

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.

Download my ebook:Getting Started with PowerShell
Getting Started with PowerShell - only $9.25

You get 36 topics organized into these 3 sections:
   1) Getting Started
   2) Real-life tasks
   3) Examples of Syntax.

In addition to the ebook, you get a PDF version of this  Introduction to PowerShell ebook  It runs to 120 pages of A4.

 *


Custom Search

Site Home

Guy Recommends: WMI Monitor and It's Free!Solarwinds WMI Monitor

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft operating systems.

Fortunately, SolarWinds have created the Free WMI Monitor so that you can actually see and understand these gems of performance information.  Take the guess work out of which WMI counters to use for applications like Microsoft Active Directory, SQL or Exchange Server.

Download your free copy of WMI Monitor

Author: Guy Thomas Copyright © 1999-2012 Computer Performance LTD All rights reserved.

Please report a broken link, or an error to: