Bird
Raised Fist0
PowerShellscripting~20 mins

String comparison (-like, -match) in PowerShell - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
PowerShell String Comparison Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this PowerShell command?
Consider the following command:
$result = 'HelloWorld' -like 'Hello*'
What is the value of $result?
PowerShell
$result = 'HelloWorld' -like 'Hello*'
Write-Output $result
ATrue
BFalse
CHelloWorld
DError
Attempts:
2 left
💡 Hint
The -like operator uses wildcard matching with * as any characters.
💻 Command Output
intermediate
2:00remaining
What does this PowerShell command output?
Given the command:
$result = 'PowerShell123' -match '\d{3}'
What is the value of $result?
PowerShell
$result = 'PowerShell123' -match '\d{3}'
Write-Output $result
AFalse
B123
CTrue
DError
Attempts:
2 left
💡 Hint
The -match operator returns True if the regex pattern matches anywhere in the string.
📝 Syntax
advanced
2:00remaining
Which option correctly uses -like to check if a string ends with '.txt'?
You want to check if the variable $fileName ends with '.txt' using the -like operator. Which of these is correct?
A$fileName -like 'txt*.'
B$fileName -like '.txt*'
C$fileName -like '*txt.'
D$fileName -like '*.txt'
Attempts:
2 left
💡 Hint
The * wildcard matches any characters before '.txt' at the end.
💻 Command Output
advanced
2:00remaining
What is the output of this PowerShell snippet?
Analyze the code:
$text = 'Data123'
if ($text -match '^Data\d+$') { 'Match' } else { 'No Match' }
What will it output?
PowerShell
$text = 'Data123'
if ($text -match '^Data\d+$') { 'Match' } else { 'No Match' }
ANo Match
BMatch
CError
DData123
Attempts:
2 left
💡 Hint
The regex ^Data\d+$ means string starts with 'Data' followed by one or more digits till end.
🧠 Conceptual
expert
2:00remaining
Which statement about -like and -match is TRUE in PowerShell?
Choose the correct statement about the difference between -like and -match operators.
A-like uses wildcard patterns and is case-insensitive by default; -match uses regular expressions and is case-insensitive by default.
B-like uses regular expressions and is case-sensitive; -match uses wildcard patterns and is case-insensitive.
C-like and -match both use regular expressions but differ in case sensitivity.
D-like uses wildcard patterns and is case-sensitive; -match uses regular expressions and is case-sensitive.
Attempts:
2 left
💡 Hint
Think about pattern types and default case sensitivity.

Practice

(1/5)
1. Which operator in PowerShell uses simple wildcard patterns for string comparison?
easy
A. -contains
B. -like
C. -match
D. -eq

Solution

  1. Step 1: Understand the purpose of -like

    The -like operator uses simple wildcard characters like * and ? to match patterns in strings.
  2. Step 2: Compare with -match

    The -match operator uses regular expressions, which are more complex than simple wildcards.
  3. Final Answer:

    -like -> Option B
  4. Quick Check:

    Simple wildcard matching = -like [OK]
Hint: Remember: -like = wildcards, -match = regex [OK]
Common Mistakes:
  • Confusing -like with -match
  • Thinking -contains works like -like
  • Assuming -eq supports wildcards
2. Which of the following is the correct syntax to check if the variable $name contains the substring 'John' using -like?
easy
A. $name -like 'John*'
B. $name -like 'John?'
C. $name -like '*John*'
D. $name -like '?John?'

Solution

  1. Step 1: Understand wildcard usage with -like

    The asterisk (*) wildcard matches zero or more characters. To check if 'John' appears anywhere, use '*John*'.
  2. Step 2: Analyze each option

    $name -like 'John*' checks if string starts with 'John'. $name -like '*John*' checks if 'John' is anywhere. $name -like '?John?' uses '?' which matches exactly one character, so it won't match 'John' alone. $name -like 'John?' checks if string starts with 'John' and has one more character.
  3. Final Answer:

    $name -like '*John*' -> Option C
  4. Quick Check:

    Substring anywhere = '*John*' [OK]
Hint: Use * before and after substring to match anywhere [OK]
Common Mistakes:
  • Forgetting to use * wildcards around substring
  • Using ? instead of * for multiple characters
  • Assuming -like matches exact substring without wildcards
3. What will be the output of this PowerShell code?
$text = 'PowerShell123'
if ($text -match '\d{3}$') { 'Ends with 3 digits' } else { 'No match' }
medium
A. Ends with 3 digits
B. No match
C. Syntax error
D. Empty output

Solution

  1. Step 1: Understand the regex pattern '\d{3}$'

    This pattern matches exactly three digits (\d{3}) at the end of the string ($).
  2. Step 2: Check the string 'PowerShell123'

    The string ends with '123', which is three digits, so the pattern matches.
  3. Final Answer:

    Ends with 3 digits -> Option A
  4. Quick Check:

    Regex matches end digits = 'Ends with 3 digits' [OK]
Hint: Use -match with regex to find patterns like digits [OK]
Common Mistakes:
  • Confusing -like with regex patterns
  • Not escaping backslash in regex
  • Assuming -match returns boolean instead of string output
4. Identify the error in this PowerShell snippet:
$file = 'report.doc'
if ($file -clike '*.DOC') { 'Match found' } else { 'No match' }
medium
A. -clike is case-sensitive, so '*.DOC' won't match 'report.doc'
B. Wildcard * is missing
C. Quotes around pattern are incorrect
D. Variable $file is not defined

Solution

  1. Step 1: Understand the -clike operator

    -clike is the case-sensitive counterpart to -like. It requires exact case matching for the pattern.
  2. Step 2: Analyze the mismatch

    The string 'report.doc' ends with lowercase '.doc', but the pattern '*.DOC' specifies uppercase '.DOC'. Other options are invalid: * is present, quotes are correct, $file is defined.
  3. Final Answer:

    -clike is case-sensitive, so '*.DOC' won't match 'report.doc' -> Option A
  4. Quick Check:

    Case mismatch with -clike = no match [OK]
Hint: Remember: -clike = case-sensitive, -like = case-insensitive [OK]
Common Mistakes:
  • Forgetting -clike is case-sensitive
  • Thinking wildcards are missing
  • Misunderstanding variable initialization
5. You want to filter a list of filenames to include only those that start with 'log' and end with a 4-digit year using PowerShell. Which command correctly uses -match to do this?
$files = @('log2020.txt', 'log2019.csv', 'data2020.log', 'log20a0.txt')
hard
A. $files | Where-Object { $_ -like 'log????' }
B. $files | Where-Object { $_ -like 'log*2020' }
C. $files | Where-Object { $_ -match 'log\d{4}$' }
D. $files | Where-Object { $_ -match '^log\d{4}' }

Solution

  1. Step 1: Understand the pattern requirements

    We want filenames starting with 'log' (^log) followed immediately by exactly 4 digits (\d{4}).
  2. Step 2: Analyze each option

    $files | Where-Object { $_ -match '^log\d{4}' } uses regex '^log\d{4}' which matches strings starting with 'log' plus 4 digits. $files | Where-Object { $_ -like 'log????' } uses -like with 'log????' which matches 'log' plus any 4 characters but not necessarily digits. $files | Where-Object { $_ -match 'log\d{4}$' } matches 'log' followed by 4 digits at the end, but the year is not necessarily at the end of the filename. $files | Where-Object { $_ -like 'log*2020' } matches 'log' followed by anything and ending with '2020', which is too specific.
  3. Final Answer:

    $files | Where-Object { $_ -match '^log\d{4}' } -> Option D
  4. Quick Check:

    Start with 'log' + 4 digits = $files | Where-Object { $_ -match '^log\d{4}' } [OK]
Hint: Use ^ for start and \d{4} for 4 digits in regex [OK]
Common Mistakes:
  • Using -like with ? instead of digits
  • Matching digits at end instead of start
  • Confusing -like and -match patterns
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard