Bird
Raised Fist0
PowerShellscripting~20 mins

Verbose and debug output in PowerShell - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Verbose & Debug 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 script with verbose enabled?
Consider this script run with the -Verbose flag:
function Test-Verbose {
  [CmdletBinding()] 
  param()
  Write-Verbose "Starting process"
  Write-Output "Process running"
  Write-Verbose "Process completed"
}

Test-Verbose -Verbose

What will be printed to the console?
PowerShell
function Test-Verbose {
  [CmdletBinding()] 
  param()
  Write-Verbose "Starting process"
  Write-Output "Process running"
  Write-Verbose "Process completed"
}

Test-Verbose -Verbose
ANo output
BProcess running
C
VERBOSE: Starting process
Process running
VERBOSE: Process completed
D
VERBOSE: Starting process
VERBOSE: Process completed
Attempts:
2 left
💡 Hint
Verbose messages appear only when the -Verbose flag is used.
💻 Command Output
intermediate
2:00remaining
What happens when you use Write-Debug without enabling debug?
Given this script:
function Test-Debug {
  [CmdletBinding()] 
  param()
  Write-Debug "Debug info"
  Write-Output "Normal output"
}

Test-Debug

What will be the output?
PowerShell
function Test-Debug {
  [CmdletBinding()] 
  param()
  Write-Debug "Debug info"
  Write-Output "Normal output"
}

Test-Debug
ADEBUG: Debug info
B
DEBUG: Debug info
Normal output
CNo output
DNormal output
Attempts:
2 left
💡 Hint
Debug messages show only when debug preference is enabled.
📝 Syntax
advanced
2:00remaining
Which option correctly enables debug output in a PowerShell script?
You want to see debug messages from Write-Debug in your script. Which code snippet correctly enables debug output?
A
$DebugPreference = 'Continue'
Write-Debug "Debug message"
B
Set-Debug -Enable
Write-Debug "Debug message"
C
Enable-Debug
Write-Debug "Debug message"
D
$DebugMode = $true
Write-Debug "Debug message"
Attempts:
2 left
💡 Hint
PowerShell uses a preference variable to control debug message display.
🚀 Application
advanced
2:00remaining
How to capture verbose output into a variable in PowerShell?
You want to run a command and save its verbose messages into a variable for later use. Which approach works?
A$verboseOutput = Get-Process -Verbose 4>&1
B$verboseOutput = Get-Process -Verbose | Out-String
C$verboseOutput = & { Get-Process -Verbose 4>&1 }
D$verboseOutput = Get-Process -Verbose 3>&1
Attempts:
2 left
💡 Hint
Verbose messages are sent to stream 4 in PowerShell.
🧠 Conceptual
expert
2:00remaining
What is the effect of setting $VerbosePreference to 'SilentlyContinue'?
In PowerShell, what happens if you set:
$VerbosePreference = 'SilentlyContinue'

and then run a script that uses Write-Verbose?
AVerbose messages are always shown regardless of -Verbose flag.
BVerbose messages are suppressed and not shown.
CVerbose messages cause an error.
DVerbose messages are shown only if -Verbose flag is used.
Attempts:
2 left
💡 Hint
The preference variable controls how verbose messages behave.

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