2010-02-05 43 views
7

Tôi muốn tiêm các tham số dòng lệnh vào psake tôi xây dựng kịch bản như:. \ build.ps1 Triển khai môi trường = "phát triển"đối số dòng lệnh Tiêm vào psake

Nhưng psake sẽ đối xử với mọi lý luận như một nhiệm vụ và sẽ trả lời "tác vụ không tồn tại"

Có thể tiêm đối số dòng lệnh trong psake không?

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

Bạn có thể có may mắn hơn khi nhận được câu trả lời cho câu hỏi này trên http://groups.google.com/group/psake-users hoặc trên http://code.google.com/p/psake/ –

+0

I đã thêm yêu cầu tính năng vào nhóm thảo luận - http://groups.google.com/group/psake-users/browse_thread/thread/cf59508789ab58eb –

Trả lời

10

Các latest release of psake tại supports passing parameters để Gọi-psake, ví dụ

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

Tính năng này vừa được thêm. :)

+0

Cảm ơn thông tin phản hồi đó là một lựa chọn tốt hơn so với một gobal biến – orjan

+0

PS tại thời điểm viết bài, mới đây tính năng này không phải là một phần của 'phát hành' chính thức: bạn sẽ phải lấy nguồn mới nhất từ ​​thân cây (hoặc bất kỳ một thân cây nào được gọi trong GIT) –

0

Tôi không có chuyên gia, nhưng tôi không nghĩ rằng có thể chuyển đối số cho Invoke-Psake. Nhìn vào nguồn mới nhất cho Psake params cho hàm Invoke-Psake là:

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  
    ) 

Có 4 thông số, xây dựng tập tin của bạn, một danh sách các nhiệm vụ, các phiên bản .NET framework, cho dù để tài liệu đầu ra của bạn nhiệm vụ. Tôi mới để PowerShell và psake và tôi đang cố gắng để làm điều tương tự, tôi đang thử nghiệm với làm điều gì đó như thế này trong kịch bản của tôi để đạt được điều tương:

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

Sau đó gọi psake với PublishForLive hoặc PublishForStaging , tùy theo điều gì tôi cần:

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

Nhưng dường như nó không có tác dụng với tôi! Đặt biến môi trường $ trong điều kiện tiên quyết có vẻ không có hiệu lực. Vẫn đang cố gắng thực hiện công việc này ...

+0

Hãy thử tạo phân bổ biến môi trường $ có thể nhìn thấy bên ngoài phạm vi scriptblock ví dụ '$ script: environment =" Live "' –

+0

Đó là điều kiện chạy trong ví dụ của bạn Publish sẽ chạy trước PublishForStaging. Một giải pháp khác là gọi Publish từ PublishForStaging, nhưng không biết liệu nó có khả thi hay không? – orjan

+0

này làm việc cho tôi: nhiệm vụ PublishStage { $ môi trường = "sân khấu" ExecuteTask ("Xuất bản") } – orjan

1

Biến toàn cục sẽ giải quyết vấn đề của tôi ngay bây giờ và chỉ với một tham chiếu đến $ toàn cầu: arg_environent sẽ dễ thay đổi nếu tôi tìm cách tốt hơn để tiêm các thuộc tính.

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" 
} 
Các vấn đề liên quan