Скрипт PowerShell в PostBuild
-
03-07-2019 - |
Вопрос
Непрерывная интеграция
Я работал над сценарием 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