Вопрос

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

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

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

PS C:\> ./example.ps1

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

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

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

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

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

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

[Обновление]

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

Это было полезно?

Решение

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

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -NoLogo -Неинтерактивная команда.'$(ProjectDir)Развертывание\PostBuildScript.ps1' -ProjectDir: '$(ProjectDir)' -Конфигурационное имя:'$(ConfigurationName)' -TargetDir:'$(TargetDir)' -TargetFileName:'$(TargetFileName)' -TargetName:'$(TargetName)

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

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

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

Другие советы

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

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

$MyInvocation.MyCommand.Path
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top