Bird
Raised Fist0
PowerShellscripting~10 mins

Try-Catch-Finally in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Try-Catch-Finally
Start Try Block
↓
Run Code in Try
↓
Error Occurs?
No→Skip Catch
|Yes↓
Run Catch Block
↓
Run Finally Block
↓
End
The script tries to run code in the Try block. If an error happens, it runs the Catch block. Finally, it always runs the Finally block.
Execution Sample
PowerShell
try {
  1 / 0
} catch {
  "Error caught"
} finally {
  "Always runs"
}
This script tries to divide 1 by 0, catches the error, and always runs the final block.
Execution Table
StepActionEvaluationOutput
1Enter Try blockExecute 1 / 0No output
2Error detectedJump to Catch blockNo output yet
3Execute Catch block"Error caught"Error caught
4Execute Finally block"Always runs"Always runs
5End scriptNo more codeScript ends
💡 Error in Try triggers Catch; Finally always runs; script ends after Finally
Variable Tracker
VariableStartAfter TryAfter CatchAfter Finally
OutputNoneError thrown"Error caught""Always runs"
Key Moments - 3 Insights
Why does the Catch block run even though the error happened inside Try?
Because the error in Try triggers the Catch block to handle it, as shown in execution_table step 2 and 3.
Does the Finally block run if there is no error?
Yes, Finally always runs after Try or Catch, shown in step 4 of the execution_table.
What happens if there is no error in Try?
Catch block is skipped and Finally runs, but in this example an error occurs so Catch runs.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output at step 3?
ANo output
B"Error caught"
C"Always runs"
DError message
💡 Hint
Check the 'Output' column at step 3 in the execution_table.
At which step does the script detect an error?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Action' and 'Evaluation' columns to find when error detection happens.
If the division 1 / 0 was changed to 1 / 1, what would happen to the Catch block?
AIt would be skipped
BIt would run as normal
CIt would run after Finally
DIt would cause another error
💡 Hint
Refer to the key_moments about what happens if no error occurs in Try.
Concept Snapshot
Try-Catch-Finally in PowerShell:
try { # code that might fail }
catch { # code if error happens }
finally { # code that always runs }

- Try runs first
- Catch runs only if error in Try
- Finally runs always, no matter what
Full Transcript
This PowerShell script uses Try-Catch-Finally to handle errors. It tries to run code inside Try. If an error happens, it jumps to Catch to handle it. Finally always runs after Try or Catch. In the example, dividing 1 by 0 causes an error, so Catch runs and prints 'Error caught'. Then Finally runs and prints 'Always runs'. This shows how error handling works step-by-step.

Practice

(1/5)
1. What is the main purpose of the try block in PowerShell's Try-Catch-Finally structure?
easy
A. To always run code regardless of errors
B. To handle errors after they occur
C. To run code only if no errors happen
D. To run code that might cause an error

Solution

  1. Step 1: Understand the role of try

    The try block contains code that might cause an error during execution.
  2. Step 2: Differentiate from catch and finally

    catch handles errors after they happen, and finally runs code always, but try is where risky code runs.
  3. Final Answer:

    To run code that might cause an error -> Option D
  4. Quick Check:

    try runs risky code = A [OK]
Hint: Try block runs code that may fail [OK]
Common Mistakes:
  • Confusing try with catch
  • Thinking finally runs only on errors
  • Believing try runs only if no errors
2. Which of the following is the correct syntax to catch an error in PowerShell?
easy
A. catch { Write-Host 'Error occurred' }
B. catch() { Write-Host 'Error occurred' }
C. catch: { Write-Host 'Error occurred' }
D. catch[] { Write-Host 'Error occurred' }

Solution

  1. Step 1: Recall PowerShell catch syntax

    In PowerShell, catch is followed by a script block in curly braces without parentheses or other symbols.
  2. Step 2: Identify correct syntax

    catch { Write-Host 'Error occurred' } uses catch { ... } which is correct; others add invalid symbols like parentheses or colons.
  3. Final Answer:

    catch { Write-Host 'Error occurred' } -> Option A
  4. Quick Check:

    Correct catch syntax uses braces only = A [OK]
Hint: Catch uses braces {} without parentheses [OK]
Common Mistakes:
  • Adding parentheses after catch
  • Using colon or brackets with catch
  • Missing curly braces around catch code
3. What will be the output of this PowerShell script?
try {
  1 / 0
  Write-Output 'Success'
} catch {
  Write-Output 'Error caught'
} finally {
  Write-Output 'Always runs'
}
medium
A. Error caught Always runs
B. Success
C. Success Always runs
D. Error caught

Solution

  1. Step 1: Analyze the try block

    The code attempts to divide 1 by 0, which causes a runtime error, so the line Write-Output 'Success' is skipped.
  2. Step 2: Check catch and finally behavior

    The catch block runs and outputs 'Error caught'. The finally block always runs and outputs 'Always runs'.
  3. Final Answer:

    Error caught Always runs -> Option A
  4. Quick Check:

    Error triggers catch, finally always runs = C [OK]
Hint: Error skips try rest, runs catch then finally [OK]
Common Mistakes:
  • Assuming 'Success' prints despite error
  • Ignoring finally block output
  • Thinking catch runs only sometimes
4. Identify the error in this PowerShell script:
try {
  Write-Output 'Start'
} catch {
  Write-Output 'Error'
} finaly {
  Write-Output 'Done'
}
medium
A. Missing parentheses after catch
B. No error in the script
C. Misspelled 'finally' keyword
D. Missing semicolon after Write-Output

Solution

  1. Step 1: Check spelling of keywords

    The script uses finaly instead of the correct finally keyword.
  2. Step 2: Verify other syntax elements

    Catch does not require parentheses, and semicolons are optional in PowerShell; so these are not errors.
  3. Final Answer:

    Misspelled 'finally' keyword -> Option C
  4. Quick Check:

    Keyword spelling matters: 'finally' correct = B [OK]
Hint: Check spelling of 'finally' carefully [OK]
Common Mistakes:
  • Thinking catch needs parentheses
  • Expecting semicolons after commands
  • Missing typo in finally keyword
5. You want to ensure a log file is always closed after writing, even if an error occurs during writing. Which Try-Catch-Finally structure correctly achieves this?
hard
A. try { Write-Output 'Write log' } catch { Close-LogFile } finally { Write-Output 'Error' }
B. try { Write-Output 'Write log' } catch { Write-Output 'Error' } finally { Close-LogFile }
C. catch { Write-Output 'Error' } try { Write-Output 'Write log' } finally { Close-LogFile }
D. try { Write-Output 'Write log' } finally { Close-LogFile } catch { Write-Output 'Error' }

Solution

  1. Step 1: Understand Try-Catch-Finally order

    The correct order is try, then catch, then finally. The finally block always runs last.
  2. Step 2: Identify correct usage for closing log file

    try { Write-Output 'Write log' } catch { Write-Output 'Error' } finally { Close-LogFile } correctly places Close-LogFile in finally to ensure it runs always, even if an error occurs.
  3. Final Answer:

    try { Write-Output 'Write log' } catch { Write-Output 'Error' } finally { Close-LogFile } -> Option B
  4. Quick Check:

    Try-Catch-Finally order with cleanup in finally = D [OK]
Hint: Put cleanup code in finally block [OK]
Common Mistakes:
  • Placing finally before catch
  • Putting cleanup in catch only
  • Misordering Try-Catch-Finally blocks
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard