Скрипт PowerShell в PostBuild - PullRequest
       16

Скрипт PowerShell в PostBuild

17 голосов
/ 02 мая 2009

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

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

В командной строке PowerShell прекрасно работает следующее:

PS C:\> ./example.ps1

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

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

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

Resolve-Path: невозможно найти путь 'C: \ Documents and Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Проекты \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl Я потому что его не существует. В C: \ Documents and Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Проекты \ C gmFamilyComm \ scripts \ cms.ps1: 4 char: 27 + $ iirfpath = (resol-path <<<< ../iirf/cms/isapirewrite4.dll).path,</p>

Resolve-Path: невозможно найти путь 'C: \ Documents and Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ familycomm ', потому что это не существует. В C: \ Documents and Settings \ bdunbar \ Мои документы \ Visual Studio 2008 \ Проекты \ C gmFamilyComm \ scripts \ cms.ps1: 5 char: 27 + $ vdirpath = (resol-path <<<< ../familycomm).path</p>

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

[Update]

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

Ответы [ 2 ]

26 голосов
/ 02 мая 2009

Я сделал эту работу в прошлом (см. 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)»

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

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

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

3 голосов
/ 03 мая 2009

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

Я бы посоветовал вам рассчитать пути на основе аргумента (как показывает Питер Сил) или взять фактическое местоположение скрипта из:

$MyInvocation.MyCommand.Path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...