Trap - PowerShell


The Trap command in PowerShell is designed to handle and manage errors that occur within a script block. By trapping errors, you can control how they are reported and potentially recover from them. This command is particularly useful in situations where you want to prevent a script from terminating abruptly due to unhandled exceptions.


Trap [ScriptBlock] -ErrorVariable <VariableName>


  • -ErrorVariable: Specifies the name of a variable that will hold the error information when an exception occurs within the script block. By default, the $Error variable is used.


Simple Error Trapping

try {
    $result = Get-Item "non-existent-file"
catch {
    Trap { Write-Error -Message "Error occurred: $_" }

Recoverable Error Handling

$errorVar = $null
try {
    $result = Get-Item "non-existent-file"
catch {
    Trap { $errorVar = $_ }
if ($errorVar) {
    Write-Warning "Error occurred: $($errorVar.Message)"
} else {
    Write-Host "No error occurred."

Common Issues

  • Incorrect Error Handling: Ensure that the script block within Trap handles the error appropriately. If it fails to do so, the error handling mechanism may not be effective.
  • Duplicate Trapping: Avoid trapping errors multiple times for the same script block. This can lead to unexpected behavior.


Trap can be used in conjunction with other error-handling techniques in PowerShell, such as:

  • Throw: To raise an error explicitly within a script block.
  • Retry-Job: To automatically retry a failed job with error handling.
  • Get-Error: Retrieves the most recent error from the error stream.
  • Write-Error: Writes an error to the error stream.
  • Throw: Raises an error explicitly.