Скрипт PowerShell в PostBuild

17

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

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

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

PS C:\> ./example.ps1

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

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

Выполняется скрипт, но я получаю раунд ошибок из 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 = (разрешение-путь & lt; & lt; ... / 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 = (разрешение-путь & lt; & lt; ... / familycomm) .path

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

[Update]

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

    
задан brad 01.05.2009 в 22:01
источник
  • Что сказал Джейсон. Разница, вероятно, связана с вашей линией пути решения. Если вы сомневаетесь, попробуйте сделать свой скрипт без использования пути решения. –  Peter Seale 04.05.2009 в 19:35

2 ответа

26

Я сделал эту работу в прошлом (см. Ссылка , если это интересно):

  

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

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

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

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

    
ответ дан Peter Seale 02.05.2009 в 00:50
источник
  • Спасибо за ответ Питер, это прекрасно работает. Что это . перед именем файла и как вы его знаете? Еще раз спасибо, +1 от меня. –  brad 04.05.2009 в 21:01
  • ха-ха, если бы я знал. Я вымотал моё вместе со сценария, который я нашел на канале 9-го канала, я думаю, теперь я не могу его найти. –  Peter Seale 05.05.2009 в 20:56
  • Я могу догадаться, что это точка, включая скрипт, хотя я не думал, что вы могли бы включать и передавать аргументы в сценарий. Интересно. Во всяком случае, путь-разрешение будет работать по-другому, если вы выполнили и выполнили сценарий с помощью dot-include. –  Peter Seale 06.05.2009 в 17:40
  • Спасибо за руководство. В визуальной студии 2017 я смог запустить сценарий командной строки сценария Pre-build для powershell.exe -NoLogo -NonInteractive -Command '$ (ProjectDir) \ killDotNet.ps1' –  JoeF 30.03.2018 в 00:14
3

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

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

$MyInvocation.MyCommand.Path
    
ответ дан JasonMArcher 03.05.2009 в 01:44
источник