PowerShell runner or Command Line runner

TeamCity 6.5 has a bundled PowerShell runner, which can be used to run psake builds. For older versions of TeamCity, the PowerShell runner plug-in will do the job; you can download the plug-in's binaries here. See Installing Additional Plugins for general help on installing plug-ins for TeamCity.

Alternatively you can just run PowerShell.exe from Command Line Runner and then run psake. See example in psake.cmd.

Setup of PowerShell runner

Add a new build step and select PowerShell runner.

  • Set your run mode (x86 or x64)
  • Set your working directory (typically the directory where your build scripts are located)
  • Select Source code mode in Script input
  • Insert into Script Source
Import-Module 'PATH_TO_PSAKE_ROOT_FOLDER\psake.psm1'
Invoke-psake .\PSAKE_BUILD_FILENAME.ps1 RunTests 
  • For 4.0.0: Make sure you have added $psake.use_exit_on_error = $true somewhere before the Invoke-psake call (e.g., amend the psake.ps1 file)
  • For 4.0.1 unofficial release on NuGet no additional steps are required
  • For current development version append to & .\psake.ps1 also if ($psake.build_success -eq $false) { exit 1 } else { exit 0 } to notify TeamCity about build failure

Now you are ready.


If you need parameterize your build script, you can use the predefined TeamCity parameters and variables. Pass in the parameters as a hash table using the following syntax:

& .\psake.ps1 -parameters @{build_number=%build.number%}

You can pass multiple parameters by separating them with semicolons:

& .\psake.ps1 -parameters @{build_number=%build.number%; personal_build=%build.is.personal%}

If you are using PowerShell v3.0 or greater, you can get all of the TeamCity parameters into a hash with the following code in your .ps1 file:

$TCParams = ConvertFrom-StringData (Get-Content $env:TEAMCITY_BUILD_PROPERTIES_FILE -Raw);

After this code executes, you can access any TeamCity parameter as $TCParams['parameter.name'] e.g. $TCParams['build.number']