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