Powershell PSAKE и задача выполнения не запущены

Попытка заставить скрипт PSAKE работать. Кажется, что задачи не выполняют функции внутри них?

у меня 2 файла

-- default.ps1 --
Import-Module "C:\dev\Phoenix\trunk\Build\BuildScripts\include.ps1"
Import-Module "C:\Software\PSAKE\JamesKovacs-psake-b0094de\psake.psm1"
Invoke-psake "C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1"
remove-module psake


-- build.ps1 --
$framework = '4.0'

properties {
    $root_dir = 'c:\dev\Phoenix\trunk\'
    $integration_deploy_dir = '\\Server025\Phoenix_IntegrationTests\'
    $build_scripts_dir = '$root_dir\Build\BuildScripts'
    $test_dir =  Join-Path $root_dir '\Tests\Core.UnitTests\bin\Debug'
    $dll = Join-Path $test_dir 'Phoenix.Core.UnitTests.dll'
} 


task default -depends Test

task MsBuild {  exec { msbuild /version }}

task Test -depends Deploy
{
    Write-Host "Start task Test"
Add-PSSnapIn Gallio
Write-Host "TEST --  $dll" 
Test-Gallio $test_dir Release x64 $dll "Core.UnitTests"     ## FYI - call to include func
Write-Host "End task Test"
}

task Deploy
{
Write-Host "Start task deploy"
Write-Host "Deploying to integration server"
copy $root_dir"\Sites" $integration_deploy_dir -Recurse -Force
Write-Host "End task deploy"    
}

На данный момент кажется, что он просто «распечатывает» вещи, перечисленные в задачах, фактически ничего не делая. Что мне не хватает? Спасибо

Извините, забыл упомянуть, я действительно просто хочу, чтобы сначала работал метод COPY - спасибо


Спасибо за помощь - я сделал все ваши предложения и до сих пор не повезло.

Если я поставлю код «встроенным», а не в задачах PSAKE, код будет работать нормально.

теперь у меня есть это

-- default.ps1
Import-Module C:\dev\Phoenix\trunk\Build\BuildScripts\include.ps1
Import-Module C:\Software\PSAKE\JamesKovacs-psake-b0094de\psake.psm1
Invoke-psake C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1
remove-module psake

-- build.ps1 $framework = '4.0'

properties {
$root_dir = 'c:\dev\Phoenix\trunk'
$sites_dir = 'c:\dev\Phoenix\trunk\sites'
$integration_deploy_dir = '\\Vsydnweb025\Phoenix_IntegrationTests\'
$build_scripts_dir = "$root_dir\Build\BuildScripts"
}

task default -depends Deploy

task Deploy
{
Write-Host 'Start task deploy'
Write-Host 'Deploying to integration server'
copy $sites_dir $integration_deploy_dir -Recurse -Force
Write-Host 'End task deploy'
get-childitem $integration_deploy_dir -include *.svclog -recurse | foreach ($_)  {remove-item $_.fullname}
}

Результат этого выглядит следующим образом:

Write-Host 'Start task deploy'
Write-Host 'Deploying to integration server'
copy $sites_dir $integration_deploy_dir -Recurse -Force
Write-Host 'End task deploy'
get-childitem $integration_deploy_dir -include *.svclog -recurse | foreach ($_) {remove-item $_.fullname}


Build Succeeded!

----------------------------------------------------------------------
Build Time Report
----------------------------------------------------------------------
Name   Duration        
----   --------        
Deploy 00:00:00.0006013
Total: 00:00:02.5335350

Таким образом, кажется, что функции в задаче просто распечатываются.

Функция копирования не запускалась, а файл Piped .SvcLog не удалялся.

Т.е. на экране я бы ожидал

«Начать развертывание задачи»

вместо

Write-Host «Начать развертывание задачи»

Я буду продолжать пытаться заставить его работать.

Спасибо за вашу помощь!!!


person Chris McKelt    schedule 21.09.2011    source источник
comment
Ну, я предполагаю, что проблема связана с PSAKE, поэтому я не буду очень полезен; Я не решаюсь предоставить эту ссылку, но это все, что я смог найти и может быть вам полезен: pseale .com/blog/StealIdeasFromThesePsakeScripts.aspx   -  person nimizen    schedule 22.09.2011


Ответы (2)


Если бы это ответили в группе google

Начало «{» должно быть в той же строке, что и функция «задача», так как это блок сценария, который передается в качестве параметра функции «задача». PS интерпретирует ваш код как 2 оператора вместо 1 оператора.

person Chris McKelt    schedule 26.09.2011

Я ничего не делал с PSAKE, но что касается Powershell, необходимо «исправить» следующее:

$root_dir = 'c:\dev\Phoenix\trunk\'

Удалите завершающий «\», так как при объединении этой переменной с другими строками (начинающимися с «\») вы получите двойной «\».

Также:

$build_scripts_dir = '$root_dir\Build\BuildScripts'

Это должно иметь двойные кавычки, чтобы обеспечить правильное расширение переменной:

$build_scripts_dir = "$root_dir\Build\BuildScripts"

Может быть, исправить это и посмотреть, есть ли у вас более значимые ошибки?

Я подозреваю, что вам также нужно будет удалить двойные кавычки вокруг ваших вызовов script/module:

Import-Module C:\dev\Phoenix\trunk\Build\BuildScripts\include.ps1
Import-Module C:\Software\PSAKE\JamesKovacs-psake-b0094de\psake.psm1
Invoke-psake C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1
remove-module psake

... и см. здесь хороший обзор как вызывать скрипты из скриптов. Используемые вами двойные кавычки превращают вызов в строку (которая не будет выполняться). Если вам нужно использовать двойные кавычки (т. е. ваш путь включает пробелы), вам нужно предварить путь оператором вызова '&':

& "C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1"

Очевидно, вам не нужно этого делать, так как в вашем пути нет пробелов.

person nimizen    schedule 21.09.2011
comment
Спасибо за ответ. Внес предложенные вами изменения. На самом деле он все еще не выполняет задачи - он распечатывает, что внутри них, но не выполняет их? - person Chris McKelt; 21.09.2011
comment
Я подозреваю, что проблема в ваших двойных кавычках - попробуйте удалить их из сценария по умолчанию, ответ отредактирован, чтобы включить это. - person nimizen; 21.09.2011
comment
Использование join-path — лучшее решение для работы с дополнительными \. Это гарантирует, что конечный путь не будет иметь повторяющихся разделителей, но и не требует их присутствия. Создание правила или предположения о наличии или отсутствии косой черты в конце пути никогда не является хорошей идеей; это всегда приводит к проблемам так или иначе в моем опыте. - person jpmc26; 24.08.2013