Bird
Raised Fist0
PowerShellscripting~5 mins

Verbose and debug output in PowerShell

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
Introduction
Verbose and debug output help you see extra details about what your script is doing. This makes it easier to find and fix problems.
When you want to understand how a script works step-by-step.
When you need to find out why a script is not working as expected.
When you want to get extra information without changing the main output.
When you are writing a script and want to check if parts of it run correctly.
When you want to share detailed script information with others for help.
Syntax
PowerShell
Write-Verbose "message"
Write-Debug "message"
Use Write-Verbose to show extra information that helps understand the script flow.
Use Write-Debug to show detailed debugging information, usually more technical.
Examples
This shows a verbose message if verbose output is enabled.
PowerShell
Write-Verbose "Starting the process..."
This shows a debug message if debug output is enabled.
PowerShell
Write-Debug "Variable x has value 10"
You can enable verbose output by adding -Verbose when running the script.
PowerShell
Write-Verbose "Step 1 completed"
You can enable debug output by adding -Debug when running the script.
PowerShell
Write-Debug "Checking condition"
Sample Program
This script defines a function that writes verbose and debug messages. When run with -Verbose and -Debug, it shows these messages along with the normal output.
PowerShell
function Test-VerboseDebug {
    param()
    Write-Verbose "Verbose: Starting function"
    Write-Debug "Debug: Checking variables"
    $x = 5
    Write-Verbose "Verbose: Variable x is $x"
    Write-Debug "Debug: Variable x type is $($x.GetType().Name)"
    Write-Output "Function completed"
}

# Run with verbose and debug enabled
Test-VerboseDebug -Verbose -Debug
OutputSuccess
Important Notes
Verbose and debug messages do not show unless you run the script with -Verbose or -Debug switches.
Use verbose for general extra info and debug for detailed technical info.
You can control the output level to avoid cluttering the screen with too many messages.
Summary
Verbose and debug output help you see extra script details without changing main results.
Use Write-Verbose and Write-Debug commands to add these messages in your script.
Enable messages by running scripts with -Verbose or -Debug options.

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