Поделиться через


Using the Select-String Cmdlet

Checking for the Existence of a String Value

What can you do with the Select-String cmdlet? Well, one thing you can do is determine whether or not a specific string value exists in a text file. For example, suppose the file C:\Scripts\Test.txt is a log file that contains the following information:

Operation succeeded, 5/1/2006
Operation succeeded, 5/2/2006
Operation failed, 5/3/2006
Operation succeeded, 5/4/2006
Operation succeeded, 5/5/2006

You’d like to be able to quickly scan the contents of the file and see whether the word Failed appears anywhere. If it does, that means one of your operations failed; if it doesn’t, that means all of your operations succeeded. (And yes, seeing as how we’re talking about failed operations we do hope you’re not a surgeon.) Here’s how you can do that:

Get-Content c:\scripts\test.txt | Select-String "Failed" -quiet

What we’re doing here is using the Get-Content cmdlet to retrieve the contents of the file C:\Scripts\Test.txt. We’re then piping those contents to the Select-String cmdlet and asking Select-String to search for the target string. By adding the -quiet parameter we get back a True if the string is found and nothing if the string is not found. If we leave off the -quiet parameter then Windows PowerShell returns each line in the text file that includes the target string:

Operation failed, 5/3/2006

Another Select-String parameter that you might find useful is -casesensitive, which performs a case-sensitive search of, in this case, the text file. This particular command will return nothing, meaning that the target string Failed could not be found:

Get-Content c:\scripts\test.txt | Select-String "Failed" -quiet -casesensitive

Why couldn’t Failed be found in the text file? That’s easy: based on letter case, there’s no such string in the file. The file contains the string failed with a lowercase f, while the target search string is Failed with an uppercase F. If you change the target string to failed (or remove the -casesensitive parameter) the command returns True.