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...