2016-02-09 10 views
6

पैरामीटर, psake 4.5.0 मैं अपने default.ps1 फ़ाइल कई अलग अलग तरीकों को चलाने के लिए कोशिश की है का उपयोग करते हुए दोनों -properties और -parameters गुजर, लेकिन उन मूल्यों सिर्फ .ps1 की जड़-गुंजाइश में अनदेखी कर रहे हैं -script।Psake गुण पर ध्यान नहीं देता और

(एक सबफ़ोल्डर में psake साथ ) रिश्तेदार निष्पादित करें:

.\psake-4.5.0\psake.ps1 .\default.ps1 BuildSolution -properties @{"a"="a";"b"="b";"c"="c";"d"="d"} -parameters @{"w"="w";"x"="x";"y"="y";"z"="z"} 

आयातित मॉड्यूल साथ निष्पादित करें:

Import-Module .\psake-4.5.0\psake.psm1 

Invoke-Psake .\default.ps1 BuildSolution -properties @{"a"="a";"b"="b";"c"="c";"d"="d"} -parameters @{"w"="w";"x"="x";"y"="y";"z"="z"} 

स्थापित Chocolatey-पैकेज के माध्यम से निष्पादित करें:

psake .\default.ps1 BuildSolution -properties "@{'a'='a';'b'='b';'c'='c';'d'='d'}" -parameters "@{'w'='w';'x'='x';'y'='y';'z'='z'}" 

cmd.exe के माध्यम से निष्पादित करें:

psake-4.5.0\psake.cmd default.ps1 BuildSolution -properties "@{'a'='a';'b'='b';'c'='c';'d'='d'}" -parameters "@{'w'='w';'x'='x';'y'='y';'z'='z'}" 

अभी, default.ps1 बस सिर्फ इन सभी मूल्यों डीबग कर रहा है:

// Since "properties" doesn't get populated, I also try "Param" 
Param(
    $w = $w, // Trying to populate from passed param 
    $x = $null, // Trying to default to null-value 
    $y // Trying another syntax, hoping for population 
    // "$z" left out, hoping for population 
) 

properties { 
    $a = $a 
    $b = $null 
    $c 
} 

Write-Host "a: $a" 
Write-Host "b: $b" 
Write-Host "c: $c" 
Write-Host "d: $d" 
Write-Host "w: $w" 
Write-Host "x: $x" 
Write-Host "y: $y" 
Write-Host "z: $z" 

Task BuildSolution -Depends Clean { 
    Write-Host "Running BuildSolution" 
} 

Task Clean { 
    Write-Host "Running Clean" 
} 

उत्पादन सभी मामलों में है:

a: 
b: 
c: 
d: 
w: 
x: 
y: 
z: 

properties और/या parameters को सेंकने के लिए पास करने के लिए उचित वाक्यविन्यास क्या है?

+0

यह मदद करता है? https://github.com/psake/psake/tree/master/examples/passingParametersString –

+0

@ almog.ori नहीं वास्तव में, यह एक बहुत सैद्धांतिक उदाहरण है, जबकि मेरा बहुत ठोस है। –

उत्तर

0

मैंने इसे बहुत लंबा नहीं देखा लेकिन ऐसा लगता है कि जब तक आप गुणों में $ चर घोषित करते हैं {... यहां ...} या परम (... यहां ...) तो psake कर सकते हैं उन्हें populate, वे ठीक है हालांकि आते हैं। आप $ z चूक गए। जब तक मैं आपके उपयोग पैरामीटर और गुणों को एक साथ क्यों नहीं लेता हूं, तो मुझे कुछ मौलिक याद आ रही है?

default.ps1

properties { 
     $a = $null, 
     $b = $null, 
     $c = $null, 
     $w = $null, 
     $x = $null, 
     $y = $null, 
     $z = $null 
    } 

Task default -Depends BuildSolution 

Task BuildSolution -Depends Clean { 
    Write-Host "Running BuildSolution" 
    echo "x -> $x" 
    echo "y -> $y" 
    echo "z -> $z" 
} 

Task Clean { 
    Write-Host "Running Clean" 
    echo "a -> $a" 
    echo "b -> $b" 
    echo "c -> $c" 
} 

आह्वान कोड नमूने (psake ग :) को chocolatey के माध्यम से स्थापित

Import-Module C:\ProgramData\chocolatey\lib\psake\tools\psake.psm1 

Invoke-Psake .\default.ps1 BuildSolution -properties @{'a'="a";"b"="b";"c"="c";'x'="x";'y'="y";'z'="z"} 

संपादित करें:

यह Properties समारोह लाइन 256 psake में है .psm1, ध्यान दें कि यह एक स्क्रिप्टब्लॉक तर्क लेता है और इसे $ psake पर मिले संदर्भ स्टैक पर गुण सरणी में जोड़ता है, फिर भी स्कैन यहाँ

function Properties { 
    [CmdletBinding()] 
    param(
     [Parameter(Position=0,Mandatory=1)][scriptblock]$properties 
    ) 
    $psake.context.Peek().properties += $properties 
} 

लाइन 372 psake.psm1 में Invoke-psake समारोह के ript ब्लॉक (इस बिंदु आप अपने write-host कॉल देखने पर लेकिन कोई चर लोड) गुंजाइश के लिए अपने default.ps1 निर्माण स्क्रिप्ट लोड

. $psake.build_script_file.FullName 

रेखा 3 9 4 और रेखा 3 9 7 स्क्रिप्ट ब्लॉक को पैरामीटर और गुणों से दायरे में लोड करता है।

foreach ($key in $parameters.keys) { 
      if (test-path "variable:\$key") { 
       set-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null 
      } else { 
       new-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null 
      } 
     } 

...

foreach ($key in $properties.keys) { 
      if (test-path "variable:\$key") { 
       set-item -path "variable:\$key" -value $properties.$key -WhatIf:$false -Confirm:$false | out-null 
      } 
     } 

लाइन 420 और 423 कॉल invoke-Task (लाइन 198) जो बदले में चर ऊपर परिभाषित का उपयोग करता है, यह भी एक ज़ोर कि चर इस समारोह में रिक्त नहीं हो रहा है ।

मुझे नहीं लगता की उम्मीद उपयोग के मामले, जड़ दायरे में इन चर लोड हो रहा है जब स्क्रिप्ट पहला है शामिल है। दायरे में सोर्स किया गया यह write-host कॉलों को तब थूकता है, डिजाइन शायद आपको टास्क विधि घोषित करने का इरादा रखता है ताकि दायरा इसमें चर को पार कर सके और इसे ध्यान में रखा जाना चाहिए।

+0

मैंने आपके अनुवर्ती प्रश्नों से थोड़ा सा सवाल स्पष्ट कर दिया है। आपके सभी उदाहरणों में कार्य के अंदर गुण हैं। मेरी समस्या यह है कि डिबगिंग के लिए रूट-स्कोप में कुछ भी नहीं आबादी है। –

+0

मैं रूट स्कोप समस्या के बारे में आज रात देखता हूं लेकिन अभी भी टूटा हुआ पुष्टि करने के लिए $ z जोड़ना चाहता हूं। इसके अलावा ही एक सुझाव है, लेकिन अपने वैश्विक दायरे को साफ करने से पहले क्यों नहीं चलाना चाहिए? –

+0

ने कोशिश की और यह रूट-स्कोप के लिए काम नहीं करता है। मैं इसे 'टास्क'-स्कोप के माध्यम से काम कर सकता हूं, लेकिन यह सवाल हाइलाइट करने के बारे में है कि यह रूट-स्कोप में क्यों काम नहीं करता है और इसके बारे में दस्तावेज़ में कुछ भी क्यों नहीं है। –

संबंधित मुद्दे