7

我想将命令行参数注入到我的 psake 构建脚本中,例如: .\build.ps1 Deploy environment="development"

但是 psake 会将每个参数都视为一个任务,并会回答“任务不存在”

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

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

3 回答 3

10

psake的最新版本现在支持将参数传递给 Invoke-psake,例如

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

刚刚添加了此功能。:)

于 2010-02-10T09:01:33.867 回答
1

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

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

任务.ps1

properties {
    $environment = $global:arg_environent
}

task default -depends Deploy

task Deploy {  
   echo "Copy stuff to $environment"
}
于 2010-02-07T08:42:00.970 回答
0

我不是专家,但我认为不可能将参数传递给 Invoke-Psake。查看 Psake 的最新来源,Invoke-Psake 函数的参数是:

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 框架版本、是否输出任务的文档。我是 powershell 和 psake 的新手,我正在尝试做同样的事情,我正在尝试在我的脚本中做这样的事情来实现同样的事情:

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

然后使用 PublishForLive 或 PublishForStaging 调用 psake,无论我需要哪个:

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

但这似乎对我不起作用!在任务前置条件中设置 $environment 变量似乎没有效果。仍在努力使这项工作...

于 2010-02-06T13:36:01.853 回答