Inject command line arguments into psake Inject command line arguments into psake powershell powershell

Inject command line arguments into psake


The latest release of psake now supports passing parameters to Invoke-psake, e.g.

Invoke-psake .\parameters.ps1 -parameters @{"p1"="v1";"p2"="v2"} 

This feature has just been added. :)


A global variable will solve my problem for now and with only one reference to $global:arg_environent it will be easy to change if i find a better way to inject the properties.

build.ps1

param(    [Parameter(Position=0,Mandatory=0)]    [string]$task,    [Parameter(Position=1,Mandatory=0)]    [string]$environment = 'dev')clear$global:arg_environent = $environmentImport-Module .\psake.psm1 Invoke-psake tasks.ps1 $taskRemove-Module psake

tasks.ps1

properties {    $environment = $global:arg_environent}task default -depends Deploytask Deploy {     echo "Copy stuff to $environment"}


I'm no expert, but I don't think it is possible to pass arguments to Invoke-Psake. Looking on the latest source for Psake the params for the Invoke-Psake function are:

param(    [Parameter(Position=0,Mandatory=0)]    [string]$buildFile = 'default.ps1',    [Parameter(Position=1,Mandatory=0)]    [string[]]$taskList = @(),    [Parameter(Position=2,Mandatory=0)]    [string]$framework = '3.5',       [Parameter(Position=3,Mandatory=0)]    [switch]$docs = $false        )

There are 4 parameters, your build file, a list of tasks, the .NET framework version, whether to output docs of your tasks. I'm new to powershell and psake and I'm trying to do the same thing, I am experimenting with doing something like this in my script to achieve the same thing:

properties {    $environment = "default"}task PublishForLive -precondition { $environment = "Live"; return $true; } -depends Publish {}task PublishForStaging -precondition { $environment = "Staging"; return $true; } -depends Publish {}task Publish {    Write-Host "Building and publishing for $environment environment"    #Publish the project...}

Then calling psake with PublishForLive or PublishForStaging, whichever I need:

powershell -NoExit -ExecutionPolicy Unrestricted -Command "& {Import-Module .\tools\psake\psake.psm1; Invoke-psake .\psake-common.ps1 PublishForLive }"

But it doesn't seem to work for me! Setting the $environment variable in the task precondition seems to have no effect. Still trying to make this work...