PowerShell Script в PostBuild

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

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

В приглашении PowerShell чудесно работает следующее:

PS C:\> ./example.ps1

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

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

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

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

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

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

[Update]

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

Ответ 1

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

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -NoLogo -NonInteractive -Command. '$ (ProjectDir) Развертывание \PostBuildScript.ps1' -ProjectDir: '$ (ProjectDir)' -ConfigurationName: '$ (ConfigurationName)' -TargetDir: '$ (TargetDir)' -TargetFileName: '$ (TargetFileName)' -TargetName: $(TargetName)

Затем введите эти параметры в первую строку вашего post-build script (если вы думаете, что сможете их использовать):

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

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

Ответ 2

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

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

$MyInvocation.MyCommand.Path