One of the more difficult aspects of teaching PowerShell is
the PowerShell pipeline. After delivering over 70 PowerShell classes, I know
this is the part to really slow down and take our time with. I’ve been working on some code to help answer
the question “What can you pipe to what without plowing through the objects and
help files.” Since this is a repetitive
task for anybody who codes in PowerShell, I thought it would be fun to automate
the process.
While doing my R&D on this project, I discovered that to
search for strings with ‘[‘ or ‘]’ cannot be done with the –Like comparison
operator. Take a look below.
PS C:\> $String = "ABC[CDE]"
PS C:\> $Sting -like "*[*"
The specified wildcard
character pattern is not valid: *[*
At line:1 char:1
+ $Sting -like
"*[*"
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [],
WildcardPatternException
+ FullyQualifiedErrorId : RuntimeException
It turns out the characters ‘[‘ and ‘]’ are actually part of
our wildcard characters. That is why we
get a pattern error. Take a look at this MSDN article: Supporting
Wildcard Characters in Cmdlet Parameters.
The below image is from that MSDN article.
The last usage is the key to our success. We actually need to encapsulate our query for
a ‘[‘ or ‘]’ inside of square braces.
PS C:\> $String = "ABC[CDE]"
PS C:\> $String -like "*[[]*"
True
In this case, we are only looking for a pattern of anything
with a ‘[‘ somewhere in it.
PS C:\> $String = "String[]"
PS C:\> $String -like "*[[]]"
True
In the above example, we are looking for a string that ends
with ‘[]’.
Pattern matching is an extremely valuable tool to have in
your PowerShell arsenal. This little
trick is helping me produce the code that I need to help make learning
PowerShell even easier.
Comments