psake psake: A build automation tool written in PowerShell

You’ll notice the Write-Host references in the tasks below; you’ll be adding to the tasks later. Create a script named psakefile.ps1 with a single task. At a minimum, a task should have a name and an action block. The name psakefile.ps1 is not mandatory, but it is the default name expected by the engine. But now you’ve got a disorganized mess of scripts and modules with a hodgepodge of manual script executions, scheduled tasks, and more.

To ensure you can manage all of those tasks, you should focus on modularization or splitting tasks up to make things easier to manage. Using the InstallSqlDriveD task from the example above as a starting point, perhaps you have an additional request for the installation. Depends – A name of a task that must run before the current task is executed. PSake will use this information to execute the task dependencies in the right order. E.g., if task A is dependent on task B, then PSake engine will run B before A.


28.9K Hangfire.Build Psake tasks and functions to build Hangfire projects with ease. For example, maybe you have a Pester test to confirm the SQL setup ZIP file exists in a folder after you run the DownloadSql task. In that case, you build a simple Pester test and invoke the DownloadSql task within the test and check for the ZIP file right after it runs. Wherever you can invoke a PowerShell script, you can invoke a PSake file.

Traditionally, creating software builds might have required knowing how to parse XML or write MSBuild scripts. Now, a PowerShell module can abstract all of that away and break it down into a number of easy-to-understand tasks inside a PowerShell script. This way, anyone already knowing how to write scripts in PowerShell can now write advanced build automation scripts as well. Programmer’s Life: From MVC to DDD, pronounced sah-ki, is an automation tool that allows anyone to create software build scripts in PowerShell. This has led ops guys and gals to adapt their existing knowledge to software development concepts. Psake is a domain-specific language and build automation tool written in PowerShell to create builds using a dependency pattern similar to Rake or MSBuild.


If used, any errors that may occur during the task runtime will not cause the whole script to break. PostAction – A script block to run right after the task has completed with success. PreAction – A script block to run prior to the task.

Here are the values for the letters P S A K E in two of the most popular word scramble games. When I try to build using I am getting an error when the build is invoked using Invoke-PSake. Connect and share knowledge within a single location that is structured and easy to search. It doesn’t rhyme with make as you might expect. The PowerShell module psansible.Inventory allows you to simplify the dynamic creation of your Ansible inventory with the help of… The Get-ADPrincipalGroupMembership PowerShell cmdlet enables you to query all the Active Directory group memberships of a user.

  • Configure-build.ps1 – this script is called first, which configures the dependencies.
  • Function that can delete a directory, whether empty or not, we use here in cleanup tasks.
  • In that case, you build a simple Pester test and invoke the DownloadSql task within the test and check for the ZIP file right after it runs.
  • These commands go into a script block that is passed to the Action parameter.

Notice in the example below the $installSqlOn_C_Drive and $installSqlOn_D_Drive variables. When Invoke-PSake invokes this script, these variables will contain a True or False value depending on if a C or D volume exists. Let’s build these files one by one with minimal implementation. At the top of the file, set strict mode and framework then dot-source any other files. With PowerShell, you can easily install a printer driver, add a printer to the repository, and then add a… This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module’s version of Install-Package.


Copy this into the interactive tool or source code of the script to reference the package. For projects that support PackageReference, copy this XML node into the project file to reference the package. # Helper script for those who want to run psake without importing the module. At some point, your PSake file will probably grow exponentially especially if you need to orchestrate large automation tasks.

You will need to “unblock” the zip file before extracting – PowerShell by default does not run files downloaded from the Internet. Just right-click the zip and click on “properties” and click on the “unblock” button. Clean the solution using dotnet clean command, in addition to directories like bin, obj, etc. This section defines variables that you can reference in anytaskin the script, like a global. They can be overridden on the command line. The following list are the basic steps to get building with psake.

Usually the psake script and its supporting files are in the same folder as the solution to make finding and running them easy. These files should be committed to VCS so they can be run by anyone, including Azure DevOps. PowerShell folks can run the PowerShell scripts directly. Psake is a build automation tool written in PowerShell.


Visual Studio Team Services Build and Release extension to run psake build scripts. If you’re just fiddling around with psake, you can do this on your local workstation. Otherwise, you’ll probably install it on a build server. After installation, you can kick the tires a bit by checking out the examples inside the module directory. I’m executing the default.ps1 build script below. Other tasks do the compile, setup test database, run tests etc.

Since any task can be executed when invoking, make sure that each one has appropriate dependencies. For exampleTestdepends onCompilethat in turn depends onInit. You can install psake by adding the psake NuGet package to a project in your solution.

Designing the Building Blocks

This is helpful when running in an Azure DevOps pipeline that’s on a hosted machine since it may not have what you need to run the build. The script below is a sample that installs psake, SQL Change Automation, and VsSetup then callInvoke-psakewith parameters. You’ll see that at its heart, psake is just a task management engine made for software builds. A container for one or more commands that, when performed together, achieve a certain goal. These commands go into a script block that is passed to the Action parameter.

Another point to note here is, $solution_name will be injected via command line parameter/argument. If no task is specified forInvoke-psake, one nameddefaultwill be executed. Each task can have multiple dependent tasks that will run before it. Here are high-level tasks that just have dependencies and don’t have a ScriptBlock themselves.


Each of these tasks is defined inside of a single pssakefile.ps1 script. If you anticipate adding more many more tasks over time, you should split those tasks up into separate files with each task inside e.g. ValidateDiskSpace.ps1, DownloadSql.ps1, InstallSqlDriveD.ps1, InstallSqlDriveD.ps1, etc.

Project Slug

You can use PowerShell to find and remove duplicate files that are only wasting valuable storage. There are no supported framework assets in this package. The topic of this article may not meet Wikipedia’s notability guidelines for products and services.

Install instructions for VSSetup can be found here and here. If you wish to use the psake command from outside of the install folder, add the folder install directory to your PATH variable. Managing the build for a software project has a lot in common with a child trying to tell a lie. The build and the lie both start as deceptively simple things, but over time missing details are added that demand more scrutiny. As the build expands to sustain itself, the likelihood of a catastrophic failure increases significantly.

Psake has many other functions that I encourage you to look over as well. Get a list of all available functions with Get-Command -Module psake. To get started with psake, first download and install it. Since psake is just a PowerShell module and is in the PowerShell Gallery, this process is easy with Find-Module.