PowerShell Script Logging and Debugging: A Comprehensive Guide Canonical URL: https://learncloud.guru/blog/powershell-script-logging-and-debugging-a-comprehensive-guide Author: Junaid Ahmed Published: 2025-01-23T16:43:13.000Z Updated: 2026-10-25T17:16:08.227Z Topics: PowerShell Tags: Powershellscripting, Powershell If you’re working on a PowerShell script and want to log all activities or debug it effectively, here’s a detailed guide to help you. This post will cover how to enable verbose output, handle errors, and implement global settings to streamline your debugging process. Enable Verbose Output PowerShell provides a built-in verbose stream for detailed … If you’re working on a PowerShell script and want to log all activities or debug it effectively, here’s a detailed guide to help you. This post will cover how to enable verbose output, handle errors, and implement global settings to streamline your debugging process. Enable Verbose Output PowerShell provides a built-in verbose stream for detailed logging. Using -Verbose Add the -Verbose flag to commands for detailed logs: Get-Process -Verbose Enable Verbose Globally Set $VerbosePreference at the top of your script: $VerbosePreference = "Continue" This enables verbose logging for all commands supporting -Verbose without needing to add the flag repeatedly. Handle Errors Effectively PowerShell scripts handle errors based on $ErrorActionPreference. Enable Strict Error Handling Set $ErrorActionPreference to stop the script on errors: $ErrorActionPreference = "Stop" Combine -ErrorAction and -Verbose Use both options for granular control: Get-Item "C:\NonExistentFile.txt" -ErrorAction Stop -Verbose Debugging with $DebugPreference Enable debugging messages for more in-depth information: $DebugPreference = "Continue" Write-Debug "This is a debug message." Trace Logging with Set-PSDebug Use Set-PSDebug to trace script execution: Set-PSDebug -Trace 2 • Trace 1: Basic information (functions, scripts, external commands). • Trace 2: Detailed variable assignments and command execution. Disable tracing when done: Set-PSDebug -Off Use Try-Catch for Error Tracking Wrap commands in a Try-Catch block for better error handling: Try { Get-Item "C:\NonExistentFile.txt" -Verbose } Catch { Write-Host "An error occurred: $($_.Exception.Message)" -ForegroundColor Red } Redirect Logs to a File Log all output, including verbose, error, and debug messages: $LogFile = "C:\Logs\CompleteLog.txt" { Get-Process -Verbose Get-Item "C:\NonExistentFile.txt" -ErrorAction Stop } *>> $LogFile Global Verbose Setting for Functions To enable verbose logging in functions: $VerbosePreference = "Continue" function Get-CustomInfo { Write-Verbose "Fetching custom information..." Write-Output "Custom Information" } Get-CustomInfo Combine Verbose and Debug Enable both for comprehensive logging: $VerbosePreference = "Continue" $DebugPreference = "Continue" Write-Output "Starting script..." Write-Debug "Debugging: About to list processes." Get-Process Scoped Verbose Logging Apply verbose logging to specific sections using a script block: & { $VerbosePreference = "Continue" Write-Verbose "Verbose logging for this block." Get-Process } Start Logging to a File with Start-Transcript For full session logging: Start-Transcript -Path "C:\Logs\VerboseLog.txt" -Append Write-Verbose "Script starting..." Get-Process Write-Verbose "Script ending..." Stop-Transcript By implementing these techniques, you can effectively log all activities and debug your PowerShell scripts with ease. Whether you’re handling errors, enabling verbose output, or redirecting logs, these strategies will help streamline your scripting process.