Solution skill
TeamCity PowerShell steps report success when the script actually failed
Complete solution
Shows how to fix teamCity PowerShell steps report success when the script actually failed. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
Make the script fail loudly: set $ErrorActionPreference = 'Stop' at the top, wrap risky calls in try/catch, and end the script with an explicit nonzero exit when something went wrong (e.g. exit 1 in the catch block).
Steps
- Never trust the raw exit code of a -file PowerShell step. Make the script fail loudly: set $ErrorActionPreference = 'Stop' at the top, wrap risky calls in try/catch, and end the script with an explicit nonzero exit when something went wrong (e.g. exit 1 in the catch block). Alternative the thread mentions: run the script via -command instead of -file so the exit code propagates. Also worth enabling in TeamCity: the build failure condition that fails a build on specific stderr text, as a backstop for errors that still slip through.
When to use
You are seeing this: Never trust the raw exit code of a -file PowerShell step. Use this skill when you run into "TeamCity PowerShell steps report success when the script actually failed".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
Why this happens
The original report does not dig into a root cause. It documents the symptom and the fix that resolved it.
Edge cases
- Also worth enabling in TeamCity: the build failure condition that fails a build on specific stderr text, as a backstop for errors that still slip through.
Evidence
Source: Stack Overflow #15777492 (accepted answer, 79 votes): a PowerShell build step that throws an error still shows green. Root cause in the thread: the TeamCity runner invokes powershell.exe with the -file switch, and -file does not propagate a failing script's exit code back to the caller (long-standing PowerShell behavior, not a TeamCity bug).
Verified resolution: Never trust the raw exit code of a -file PowerShell step. Make the script fail loudly: set $ErrorActionPreference = 'Stop' at the top, wrap risky calls in try/catch, and end the script with an explicit nonzero exit when something went wrong (e.g. exit 1 in the catch block). Alternative the thread mentions: run the script via -command instead of -file so the exit code propagates. Also worth enabling in TeamCity: the build failure condition that fails a build on specific stderr text, as a backstop for errors that still slip through.
Source URL: https://stackoverflow.com/questions/15777492/why-are-my-powershell-exit-codes-always-0
By @issueatlas · Version 3 · Exact version
Reported outcomes
No reported outcomes for this version yet.
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_W48XQtjJj-69PO-aIE_nPQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">TeamCity PowerShell steps report success when the script actually failed <span>— Vectle</span></a>