Bird
Raised Fist0
PowerShellscripting~15 mins

Verbose and debug output in PowerShell - Mini Project: Build & Apply

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Verbose and debug output
📖 Scenario: You are writing a PowerShell script to process a list of files. You want to add messages that help you see what the script is doing and find problems if they happen.
🎯 Goal: Learn how to use verbose and debug messages in PowerShell scripts to show extra information and help with troubleshooting.
📋 What You'll Learn
Create a list of file names in a variable called $files.
Add a variable called $count to count files processed.
Use Write-Verbose to show a message for each file processed.
Use Write-Debug to show a debug message for each file.
Print the total count of files processed at the end.
💡 Why This Matters
🌍 Real World
Verbose and debug messages help script writers see what their script is doing and find problems quickly. This is useful when scripts get bigger or more complex.
💼 Career
Many IT and automation jobs require writing scripts that are easy to troubleshoot. Knowing how to add verbose and debug output is a key skill for maintaining and improving scripts.
Progress0 / 4 steps
1
Create a list of files
Create a variable called $files and assign it an array with these exact file names: "file1.txt", "file2.txt", "file3.txt".
PowerShell
Hint

Use @() to create an array in PowerShell.

2
Add a counter variable
Add a variable called $count and set it to 0 to count how many files are processed.
PowerShell
Hint

Just assign 0 to $count.

3
Add verbose and debug messages in a loop
Use a foreach loop with variable $file to go through $files. Inside the loop, increase $count by 1. Use Write-Verbose to print "Processing file: $file" and Write-Debug to print "Debug: Starting file $file".
PowerShell
Hint

Use $count++ to add 1 to the count inside the loop.

4
Print the total count of files processed
After the loop, write a line to print "Total files processed: " followed by the value of $count using Write-Output.
PowerShell
Hint

Use Write-Output to show the final count.

Practice

(1/5)
1. What is the main purpose of using Write-Verbose in a PowerShell script?
easy
A. To stop the script execution immediately
B. To write error messages to the console
C. To show extra informational messages when the script runs with -Verbose enabled
D. To create output files automatically

Solution

  1. Step 1: Understand Write-Verbose purpose

    Write-Verbose is used to add extra informational messages that only show when the script is run with the -Verbose flag.
  2. Step 2: Differentiate from other commands

    It does not stop execution, write errors, or create files. It only provides optional extra info.
  3. Final Answer:

    To show extra informational messages when the script runs with -Verbose enabled -> Option C
  4. Quick Check:

    Verbose messages = extra info shown with -Verbose [OK]
Hint: Verbose shows extra info only when -Verbose is used [OK]
Common Mistakes:
  • Confusing Write-Verbose with Write-Error
  • Expecting verbose messages without -Verbose flag
  • Thinking Write-Verbose stops script execution
2. Which of the following is the correct syntax to enable debug messages in a PowerShell script?
easy
A. Run the script with -Debug parameter
B. Add Write-Debug -Enable inside the script
C. Use Set-DebugMode On before running the script
D. Include Enable-Debug command in the script

Solution

  1. Step 1: Identify how to enable debug output

    Debug messages appear when the script is run with the -Debug parameter.
  2. Step 2: Check other options for validity

    There is no Write-Debug -Enable, Set-DebugMode, or Enable-Debug commands in PowerShell.
  3. Final Answer:

    Run the script with -Debug parameter -> Option A
  4. Quick Check:

    Debug enabled by running script with -Debug [OK]
Hint: Use -Debug flag when running script to see debug messages [OK]
Common Mistakes:
  • Trying to enable debug inside script with wrong commands
  • Confusing debug enabling with verbose enabling
  • Assuming debug is always on by default
3. What will be the output when running this script with -Verbose?
Write-Verbose "Starting process"
Write-Output "Process running"
Write-Verbose "Process completed"
medium
A. No output
B. Process running
C. Process running\nStarting process\nProcess completed
D. Starting process\nProcess running\nProcess completed

Solution

  1. Step 1: Understand Write-Verbose output with -Verbose

    When run with -Verbose, all Write-Verbose messages show along with normal output.
  2. Step 2: Identify output order

    The script writes verbose messages "Starting process" and "Process completed" plus the normal output "Process running" in order.
  3. Final Answer:

    Starting process Process running Process completed -> Option D
  4. Quick Check:

    Verbose + Output = all messages shown [OK]
Hint: Verbose messages show only with -Verbose, normal output always shows [OK]
Common Mistakes:
  • Ignoring verbose messages in output
  • Assuming verbose messages appear without -Verbose
  • Mixing order of output lines
4. You wrote a script using Write-Debug messages, but no debug output appears when running it with -Debug. What is the most likely cause?
medium
A. The debug preference variable $DebugPreference is set to 'SilentlyContinue'
B. The script does not contain any Write-Debug commands
C. The script was run with -Verbose instead of -Debug
D. The script has syntax errors preventing debug output

Solution

  1. Step 1: Check $DebugPreference effect

    Even with -Debug, if $DebugPreference is 'SilentlyContinue', debug messages won't show.
  2. Step 2: Verify other options

    The script does not contain any Write-Debug commands means no debug commands, but question states debug commands exist. The script was run with -Verbose instead of -Debug is about verbose, not debug. The script has syntax errors preventing debug output would cause errors, not silent debug.
  3. Final Answer:

    The debug preference variable $DebugPreference is set to 'SilentlyContinue' -> Option A
  4. Quick Check:

    $DebugPreference controls debug output display [OK]
Hint: Check $DebugPreference; must not be 'SilentlyContinue' to see debug [OK]
Common Mistakes:
  • Confusing -Verbose with -Debug flags
  • Ignoring $DebugPreference variable
  • Assuming debug always shows if -Debug used
5. You want to write a PowerShell script that shows detailed debug messages only when debugging is enabled, and verbose messages only when verbose is enabled. Which code snippet correctly implements this behavior?
hard
A.
$DebugPreference = 'Continue'
Write-Output "Normal output"
Write-Debug "Debug info"
Write-Verbose "Verbose info"
B.
Write-Debug "Debug info"
Write-Verbose "Verbose info"
Write-Output "Normal output"
C.
if ($DebugPreference -eq 'SilentlyContinue') { Write-Debug "Debug info" }
if ($VerbosePreference -eq 'SilentlyContinue') { Write-Verbose "Verbose info" }
Write-Output "Normal output"
D.
Write-Debug "Debug info"
Write-Verbose "Verbose info"
Write-Output "Normal output"
Set-Variable -Name DebugPreference -Value 'Continue'

Solution

  1. Step 1: Understand default behavior of Write-Debug and Write-Verbose

    These commands automatically show messages only if debugging or verbose is enabled by running script with -Debug or -Verbose.
  2. Step 2: Analyze code snippets

    Write-Debug "Debug info"
    Write-Verbose "Verbose info"
    Write-Output "Normal output"
    uses both commands directly, which is correct.
    $DebugPreference = 'Continue'
    Write-Output "Normal output"
    Write-Debug "Debug info"
    Write-Verbose "Verbose info"
    sets $DebugPreference to 'Continue' first, forcing debug messages to always show even without -Debug.
    if ($DebugPreference -eq 'SilentlyContinue') { Write-Debug "Debug info" }
    if ($VerbosePreference -eq 'SilentlyContinue') { Write-Verbose "Verbose info" }
    Write-Output "Normal output"
    checks for 'SilentlyContinue', showing messages when NOT enabled.
    Write-Debug "Debug info"
    Write-Verbose "Verbose info"
    Write-Output "Normal output"
    Set-Variable -Name DebugPreference -Value 'Continue'
    sets DebugPreference after messages, so ineffective.
  3. Final Answer:

    Write-Debug "Debug info" Write-Verbose "Verbose info" Write-Output "Normal output" -> Option B
  4. Quick Check:

    Write-Debug and Write-Verbose auto-check flags [OK]
Hint: Use Write-Debug and Write-Verbose directly; flags control output [OK]
Common Mistakes:
  • Forcing preference to 'Continue' unconditionally
  • Using incorrect condition like 'SilentlyContinue' in checks
  • Setting preferences after output commands