7

.\build.ps1 Deploy environment="development" のように、psake ビルド スクリプトにコマンド ライン パラメーターを挿入したいと考えています。

しかし、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 への参照が 1 つだけあれば、プロパティを注入するより良い方法を見つければ簡単に変更できます。

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

タスク.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    
    )

ビルドファイル、タスクのリスト、.NET Frameworkのバージョン、タスクのドキュメントを出力するかどうかの4つのパラメーターがあります。私は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 に答える