Pregunta

Integración continua

He estado trabajando en un script de PowerShell para mantener nuestro proceso de desarrollo optimizado. Estaba planeando ejecutarlo como un evento posterior a la compilación, pero tengo algunos problemas.

Desde el indicador de PowerShell, lo siguiente funciona de maravilla:

PS C:\> ./example.ps1

Sin embargo, cuando intente ejecutar esto desde cmd.exe de la siguiente manera:

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

El script se ejecuta pero recibo una ronda de errores de PowerShell, que consiste principalmente en errores de resolución de ruta de la función resolve-path:

  

Resolve-Path: No se puede encontrar la ruta 'C: \ Documents and Settings \ bdunbar \ My Documents   \ Visual Studio 2008 \ Proyectos \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl   l 'porque no existe.   En C: \ Documents and Settings \ 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: No se puede encontrar la ruta 'C: \ Documents and Settings \ bdunbar \ My Documents   \ Visual Studio 2008 \ Proyectos \ CgmFamilyComm \ FamilyComm \ familycomm 'porque lo hace   No existe.   En C: \ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ C   gmFamilyComm \ scripts \ cms.ps1: 5 char: 27   + $ vdirpath = (resolve-path < < < < ../familycomm).path

¿Hay alguna forma de evitar esto? ¿Podría ser un problema al ejecutar <=> en <=>?

[Actualización]

He podido cambiar las cosas para evitar los errores que están ocurriendo, pero sigo recibiendo errores que funcionan perfectamente desde el símbolo del sistema de PowerShell. No puedo entender cuál es la diferencia.

¿Fue útil?

Solución

He hecho este trabajo en el pasado (vea http: // sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544 si está interesado):

  

C: \ WINDOWS \ system32 \ windowspowershell \ v1.0 \ powershell.exe -NoLogo   -NonInteractive -Command. '$ (ProjectDir) Deployment \ PostBuildScript.ps1'   -ProjectDir: '$ (ProjectDir)' -ConfigurationName: '$ (ConfigurationName)' -TargetDir: '$ (TargetDir)' -TargetFileName: '$ (TargetFileName)' -TargetName: '$ (TargetName)

Luego, arroje estos parámetros en la primera línea de su secuencia de comandos posterior a la compilación (si cree que puede usarlos):

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

También debo señalar, no estoy usando esto actualmente. Me gustó usarlo como un scratchpad rápido para recargar los datos de prueba para ejecutar pruebas de integración.

Otros consejos

Parece que su problema es cómo se resuelven las rutas relativas. Las rutas relativas se resuelven según la ubicación actual (almacenada en $pwd) y no según la ubicación del script. Entonces, si lanzó el script desde C:\, definitivamente no funcionaría.

Te sugiero que calcules las rutas en función de un argumento (como lo muestra Peter Seale), o que tomes la ubicación real del script en:

$MyInvocation.MyCommand.Path
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top