2009-05-01 3 views
17

Непрерывная интеграция

Я работаю над скриптом PowerShell, чтобы упростить процесс разработки. Я планировал запустить его как событие после сборки, но у меня проблемы.PowerShell Script в PostBuild

С PowerShell стремительных, следующие прекрасно работает:

PS C:\> ./example.ps1 

Однако при попытке запуска этого из cmd.exe следующим образом:

C:\> powershell -command "&\"C:\path to script\example.ps1\"" 

Скрипт выполняется, но я получаю раунд ошибок назад от PowerShell, состоящего в основном из ошибок разрешения пути от функции resolve-path:

Решить путь: не удается найти путь «C: \ Documents and Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl l ', потому что его не существует. В C: \ Documents и Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Projects \ C gmFamilyComm \ Сценарии \ cms.ps1: 4 символ: 27 + $ iirfpath = (Решимость-путь < < < < ../ IIRF/КМВ/isapirewrite4.dll) .path,

Resolve-Path: не удается найти путь 'C: \ Documents и Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ familycomm' потому, что он do es не существует. В C: \ Documents и Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Projects \ C gmFamilyComm \ Сценарии \ cms.ps1: 5 символ: 27 + $ vdirpath = (Решимость-путь < < < < ../ familycomm) .path

Есть ли способ обойти это? Может быть проблема с запуском resolve-path под cmd.exe?

[Update]

Я был в состоянии изменить положение вещей, чтобы обойти ошибки, которые происходят, но я все еще получаю ошибки, которые работают прекрасно из командной строки PowerShell. Я не могу понять, в чем разница.

+0

Что сказал Джейсон. Разница, вероятно, связана с вашей линией пути решения. Если вы сомневаетесь, попробуйте сделать свой скрипт без использования пути решения. –

ответ

25

Я сделал эту работу в прошлом (см http://sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544, если интересно):

C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -nologo -NonInteractive -command. '$ (ProjectDir) Deployment \ PostBuildScript.ps1' -ProjectDir: '$ (ProjectDir)' -ConfigurationName: '$ (ConfigurationName)' -TargetDir: '$ (TargetDir)' -TargetFileName: '$ (TargetFileName)' -TargetName : '$ (TargetName)

Затем введите эти параметры в первую строку вашего сценария пост-сборки (если y НУ думаю, что вы можете быть в состоянии использовать их):

param($ProjectDir, $ConfigurationName, $TargetDir, $TargetFileName)

Кроме того, я должен отметить, что я не использую это в настоящее время.Мне понравилось использовать его в качестве быстрого блокнота для перезагрузки тестовых данных для запуска интеграционных тестов.

+0

Спасибо за ответ Питер, это прекрасно работает. Что это . перед именем файла и как вы его знаете? Еще раз спасибо, +1 от меня. – brad

+0

ха-ха, хотелось бы знать. Я вымотал моё вместе со сценария, который я нашел на канале 9-го канала, я думаю, теперь я не могу его найти. –

+0

Я могу догадаться, что это точка, включая скрипт, хотя я и не думал, что вы можете включать и передавать аргументы в сценарий. Интересно. В любом случае, путь разрешения будет работать по-другому, если вы выполнили и выполнили сценарий с использованием dot-included. –

3

Похоже, ваша проблема заключается в том, как разрешаются относительные пути. Относительные пути разрешаются на основе текущего местоположения (хранятся в $ pwd) и не зависят от местоположения сценария. Поэтому, если вы запустили скрипт из C: \, он определенно не сработает.

Я хотел бы предложить вам caculate пути, основанный на аргументе (как показывает Питер Seale), или захватить фактическое расположение сценария от:

$MyInvocation.MyCommand.Path