📖 Scenario: You are preparing a simple report for your team. You want to display names and scores neatly aligned in columns.
🎯 Goal: Build a PowerShell script that formats names and scores using the -f operator to align the output in columns.
📋 What You'll Learn
Create a hashtable with exact names and scores
Create a format string variable using the -f operator placeholders
Use a loop to format each name and score using the format string
Print the formatted lines to display aligned columns
💡 Why This Matters
🌍 Real World
Formatting output neatly is useful for reports, logs, and console displays where readability matters.
💼 Career
Many automation and scripting jobs require formatting data for clear presentation using PowerShell or similar tools.
Progress0 / 4 steps
1
Create the data hashtable
Create a hashtable called scores with these exact entries: 'Alice' = 85, 'Bob' = 92, 'Charlie' = 78.
PowerShell
Hint
Use @{} to create a hashtable and separate entries with semicolons.
2
Create the format string
Create a variable called formatString and set it to the string '{0,-10} {1,5}' which will format the name left-aligned in 10 spaces and the score right-aligned in 5 spaces.
PowerShell
Hint
The -10 means left-align in 10 spaces, 5 means right-align in 5 spaces.
3
Format each entry using the -f operator
Use a foreach loop with variables $name and $score to iterate over $scores.GetEnumerator(). Inside the loop, create a variable $line that formats $name and $score using $formatString -f $name, $score.
PowerShell
Hint
Use $scores.GetEnumerator() to loop through the hashtable entries.
4
Print the formatted lines
Inside the foreach loop, add a line to print the variable $line using Write-Output $line.
PowerShell
Hint
Use Write-Output to print each formatted line inside the loop.
Practice
(1/5)
1. What does the -f operator do in PowerShell?
easy
A. It formats a string by replacing placeholders with values.
B. It runs a loop over a list of items.
C. It defines a function in a script.
D. It comments out a line of code.
Solution
Step 1: Understand the role of -f operator
The -f operator is used to format strings by inserting values into placeholders like {0}, {1}.
Step 2: Compare with other options
Options A, C, and D describe unrelated PowerShell features: loops, functions, and comments.
Final Answer:
It formats a string by replacing placeholders with values. -> Option A
Quick Check:
Formatting strings = B [OK]
Hint: Remember: -f means format string with placeholders [OK]
Common Mistakes:
Confusing -f with loop or function syntax
Thinking -f comments code
Assuming -f runs commands
2. Which of the following is the correct syntax to insert two variables $name and $age into a string using the -f operator?
easy
A. "Name: {0} Age: {1}" -f ($name $age)
B. "Name: $name, Age: $age" -f
C. "Name: {1}, Age: {0}" -f $name, $age
D. "Name: {0}, Age: {1}" -f $name, $age
Solution
Step 1: Check placeholder order and variables
Placeholders {0} and {1} correspond to the first and second variables after -f, so {0} = $name, {1} = $age.
Step 2: Validate syntax correctness
"Name: {0}, Age: {1}" -f $name, $age correctly uses commas to separate variables and matches placeholders. "Name: $name, Age: $age" -f does not use placeholders. "Name: {1}, Age: {0}" -f $name, $age swaps placeholders incorrectly. "Name: {0} Age: {1}" -f ($name $age) has invalid syntax with parentheses and missing comma.
Final Answer:
"Name: {0}, Age: {1}" -f $name, $age -> Option D
Quick Check:
Correct placeholder order and syntax = A [OK]
Hint: Match {0}, {1} to variables in order, separate with commas [OK]
Common Mistakes:
Swapping placeholder numbers incorrectly
Omitting commas between variables
Using variables directly without placeholders
3. What is the output of this PowerShell command?
$num = 7.12345 "Rounded number: {0:N2}" -f $num
medium
A. Rounded number: 7
B. Rounded number: 7.12345
C. Rounded number: 7.12
D. Rounded number: 7.1
Solution
Step 1: Understand the format specifier N2
The format specifier 'N2' means number with 2 decimal places, rounding the value.
Step 2: Apply formatting to the number
$num = 7.12345 rounded to 2 decimals is 7.12, so the output string is "Rounded number: 7.12".
Final Answer:
Rounded number: 7.12 -> Option C
Quick Check:
Number format N2 rounds to 2 decimals = D [OK]
Hint: N2 means number with 2 decimals, rounds automatically [OK]
Common Mistakes:
Ignoring rounding and printing full decimals
Confusing N2 with other formats
Missing the decimal places
4. Identify the error in this PowerShell formatting command:
"User: {0}, Score: {1}" -f $user
medium
A. Missing second argument for {1} placeholder
B. Incorrect placeholder syntax
C. Variables should be inside the string, not after -f
D. The -f operator cannot format strings
Solution
Step 1: Count placeholders and arguments
The string has two placeholders: {0} and {1}, but only one argument ($user) is provided after -f.
Step 2: Understand the consequence
Because {1} has no matching argument, this causes an error or unexpected output.
Final Answer:
Missing second argument for {1} placeholder -> Option A
Quick Check:
Placeholders must match arguments count = C [OK]
Hint: Count placeholders and arguments; they must match [OK]
Common Mistakes:
Providing fewer arguments than placeholders
Misunderstanding placeholder numbering
Thinking variables go inside string without -f
5. You want to format a list of product prices to show as currency with 2 decimals using the -f operator inside a loop. Which code snippet correctly formats each price stored in $prices array?
hard
A. foreach ($p in $prices) { "Price: $p:C2" }
B. foreach ($p in $prices) { "Price: {0:C2}" -f $p }
C. foreach ($p in $prices) { "Price: {1:C2}" -f $p }
D. foreach ($p in $prices) { "Price: {0:C}" -f $prices }
Solution
Step 1: Understand the currency format specifier
The format specifier 'C2' formats a number as currency with 2 decimal places.
Step 2: Check loop and placeholder usage
foreach ($p in $prices) { "Price: {0:C2}" -f $p } correctly loops over each price $p and formats it with {0:C2} and passes $p as argument. foreach ($p in $prices) { "Price: $p:C2" } incorrectly tries to format inside string without -f. foreach ($p in $prices) { "Price: {1:C2}" -f $p } uses {1:C2} but only one argument is passed, causing error. foreach ($p in $prices) { "Price: {0:C}" -f $prices } passes entire array $prices instead of single price.
Final Answer:
foreach ($p in $prices) { "Price: {0:C2}" -f $p } -> Option B
Quick Check:
Loop each price with {0:C2} and $p argument = A [OK]
Hint: Use {0:C2} with single variable inside loop [OK]
Common Mistakes:
Using wrong placeholder index
Passing whole array instead of single item
Trying to format without -f operator
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.