The tool Invoke-Build matured enough in order to be called the first
release, v1.0.0. A few points of interest and differentiators:
* There are no special parameters and properties in build scripts.
Standard PowerShell parameters (param(...)) are used as parameters and
variables defined at the script level are used as properties. Both
parameters and values are available for tasks as $SomeVariable for
reading and $script:SomeVariable for writing. Tasks can create new
shared variables at the script scope as $script:NewVariableName = ...
* Invoke-Build tasks do not have separate -Depends and -Action
parameters. Instead, tasks have the -Jobs parameter where jobs are
either task names or script blocks (any number of both and any order
is allowed). Tasks and blocks are invoked in the order they are
specified. This approach seems to be simple and flexible at the same
time. In particular, tasks can be specified after code blocks (a new
concept) and this can be used, just for example, for implementing task
chains that can be started (e.g. restarted after a failure) at the
specified point. Trivial example:
* Build scripts can be "classic" (called by Invoke-Build, similar to
psake) or "master" (they call Invoke-Build themselves). Master build
scripts have a couple of extra commands to be called but they are
regular PowerShell scripts, they are called directly with task list
and own parameters.