Script PowerShell em Postbuild
-
03-07-2019 - |
Pergunta
Integração contínua
Eu tenho trabalhado em um script do PowerShell para manter nosso processo de desenvolvimento simplificado. Eu estava planejando executá-lo como um evento pós-construção, mas estou tendo alguns problemas.
No prompt PowerShell, o seguinte funciona maravilhosamente:
PS C:\> ./example.ps1
No entanto, ao tentar executar isso de cmd.exe
do seguinte modo:
C:\> powershell -command "&\"C:\path to script\example.ps1\""
O script é executado, mas eu recebo uma rodada de erros de volta do PowerShell, consistindo principalmente de erros de resolução de caminho do resolve-path
função:
Resolve-Path: Não é possível encontrar caminho 'C: Documentos e Configurações Bdunbar My Documents Visual Studio 2008 Projects CGMfamilyComm FamilyComm iirf cms isapirewrite4.dl l' porque não existe. Em C: Documentos e Configurações Bdunbar My Documents Visual Studio 2008 Projects C GmfamilyComm Scripts cms.ps1: 4 char: 27 + $ iirfpath = (resolve-path <<< ../iirf/cms /isaPirewrite4.dll).path,
Resolve-Path: Não é possível encontrar o caminho 'C: Documentos e Configurações Bdunbar My Documents Visual Studio 2008 Projects CGMfamilyComm FamilyComm FamilyComm' porque não existe. Em C: Documentos e Configurações Bdunbar My Documents Visual Studio 2008 Projects C GmfamilyComm Scripts cms.ps1: 5 char: 27 + $ vdirpath = (resolve-path <<<< ../familyComm). caminho
Existe uma maneira de contornar isso? Poderia ser um problema com a corrida resolve-path
debaixo cmd.exe
?
Atualizar
Consegui mudar as coisas para contornar os erros que estão ocorrendo, mas ainda recebo erros que funcionam perfeitamente bem do prompt de comando do PowerShell. Não consigo descobrir qual é a diferença.
Solução
Eu fiz esse trabalho no passado (veja http://sharepointpdficon.codeplex.com/sourcecontrol/changeset/view/13092#300544 se estiver interessado):
C: Windows System32 WindowsPowershell V1.0 PowerShell.exe -nologo -noninteractive -Command. '$ (ProjectDir) implantação postbuildScript.ps1' -projectdir: '$ (ProjectDir)' -configurationName: '$ ) '-Targetdir:' $ (TargetDir) '-targetFilename:' $ (TargetFileName) '-targetName:' $ (TargetName)
Em seguida, jogue esses parâmetros na primeira linha do seu script pós-construção (se você acha que poderá usá-los):
param($ProjectDir, $ConfigurationName, $TargetDir, $TargetFileName)
Também devo salientar, não estou usando isso atualmente. Gostei de usá -lo como um rápido scratchpad para recarregar os dados do teste para executar testes de integração.
Outras dicas
Parece que o seu problema é como os caminhos relativos são resolvidos. Caminhos relativos são resolvidos com base no local atual (armazenado em $pwd
) e não com base na localização do script. Então, se você lançou o script de C:\
, definitivamente não funcionaria.
Eu sugiro que você calcule os caminhos com base em um argumento (como Peter Seale mostra) ou pegue a localização real do script de:
$MyInvocation.MyCommand.Path