2010-02-05 47 views
7

我想注入的命令行参数代入我的psake构建脚本一样: \ build.ps1部署环境=“发展”进样的命令行参数为psake

但psake会对待每一个参数的任务和将回答“任务不存在”

是否可以在psake中注入命令行参数?

build.ps1 --> 
Import-Module '.\psake.psm1' 
Invoke-psake '.\tasks.ps1' $args 
Remove-Module psake 
+1

在http://groups.google.com/group/psake-users或http://code.google.com/p/psake/ – 2010-02-05 23:51:35

+0

上,您可能有更好的运气可以回答此问题。已向讨论组添加了功能请求 - http://groups.google.com/group/psake-users/browse_thread/thread/cf59508789ab58eb – 2010-02-07 22:32:49

回答

10

latest release of psake现在supports passing parameters到调用-psake,例如

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

该功能刚刚添加完毕。 :)

+0

感谢您的反馈,它比在写作的时候gobal变量 – orjan 2010-02-10 10:12:42

+0

PS一个更好的选择,这个新功能不是官方“发布”的一部分:你将不得不从主干中获得最新的源代码(或者任何在GIT中调用的主干) – 2010-02-10 11:05:23

0

我不是专家,但我不认为有可能将参数传递给Invoke-Psake。找对Psake最新源代码的调用,Psake功能PARAMS是:

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  
    ) 

有4个参数,生成文件,任务列表,.NET Framework版本,是否要输出的文档任务。

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

然后调用psake与PublishForLive或PublishForStaging:我是新来的PowerShell和psake,我试图做同样的事情,我有做这样的事情在我的脚本来实现同样的事情试验,无论我需要什么:

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

但它似乎并不适合我!在任务前置条件中设置$ environment变量似乎没有效果。仍然试图使这项工作...

+0

尝试使$环境变量分配在scriptblock范围外可见'$ script:environment =“Live”' – 2010-02-06 20:42:16

+0

这是您的示例中的竞争条件发布将在PublishForStaging之前运行。另一种解决方案是从PublishForStaging中调用Publish,但不知道它是否可行? – orjan 2010-02-07 08:34:35

+0

这个工作对我来说: 任务PublishStage { $环境=“舞台” ExecuteTask(“发布”) } – orjan 2010-02-07 10:13:33

1

一个全局变量将解决我现在的问题,只有一个引用$全局:arg_environent它将很容易改变,如果我找到一个更好的方式来注入属性。

build.ps1

param(
    [Parameter(Position=0,Mandatory=0)] 
    [string]$task, 
    [Parameter(Position=1,Mandatory=0)] 
    [string]$environment = 'dev' 
) 

clear 
$global:arg_environent = $environment 
Import-Module .\psake.psm1 
Invoke-psake tasks.ps1 $task 
Remove-Module psake 

tasks.ps1

properties { 
    $environment = $global:arg_environent 
} 

task default -depends Deploy 

task Deploy { 
    echo "Copy stuff to $environment" 
}