2009-12-30 29 views
6

Recién comenzando con PowerShell. Estaba ejecutando archivos DOS .bat en mis eventos de creación de publicaciones en VS y quería graduarme en PowerShell. Los archivos Bat fueron fáciles ... CALL something.bat. Traté de hacer eso con un archivo PowerShell PS1 y mi ensayo y erroring me llevó a la siguiente (lo primero que trabajó ... intentó todas las cosas simples primero, obviamente):El comando más fácil/más corto para ejecutar un script de PowerShell como un evento de compilación en Visual Studio

powershell -command "& {(powershell '$(ProjectDir)test.ps1')}" 

¿Existe una versión abreviada de esto? Creo que lo único que realmente me molesta son las llamadas redundantes al ejecutable de PowerShell, pero eso probablemente solo sea necesario porque los archivos .ps1 se abren en el bloc de notas de forma predeterminada en mi máquina (y debería mantener la redundancia para su implementación en otros sistemas, así que m no depende del programa predeterminado para un tipo de archivo). De todos modos, si hay redundancia innecesaria aquí, me gustaría saber.

Soy nuevo en PowerShell, por lo que siempre se agradece cualquier idea relacionada.

Respuesta

3

De acuerdo con la MSN, esto debería funcionar agradable:

powershell.exe "$(ProjectDir)test.ps1" 

Editar: encontrado this

powershell.exe "& ""$(ProjectDir)test.ps1""" 
+0

Lo sé ... y tendría mucho sentido. Pero, incluso cuando lo intento de nuevo ahora, no funciona. – Rich

+0

@Rich: encontré otro artículo, por favor, inténtalo. – Bobby

+0

Sí. Había visto ese otro y lo intenté, pero debo haber escrito mal algo porque funciona bien ahora. Gracias. – Rich

4

He usado PowerShell como un evento posterior a la generación en el pasado; ahora me inclino por utilizar psake (sistema de compilación super simple) o simplemente ejecutar un script de PowerShell sin formato. Los eventos posteriores a la creación se vuelven desordenados, inflexibles y tienen pocas ventajas sobre hacer lo mismo en un script de compilación.

EDIT: Si usted todavía está interesado en el uso de una secuencia de comandos posterior a la generación, he respondido a la pregunta antes de here

1

No vi ninguna de MSDN, simplemente funciona:

powershell $(ProjectDir)test.ps1 

Por cierto. no se olvide de configurar los privilegios de ejecución para AMBAS versiones de PowerShell: 32 bits y 64 bits.

0

Yo era una especie de contento con la solución elegante powershell $(ProjectDir) se detalla aquí, pero me encontré con problemas al iniciar/detener la aplicación de IIS piscinas a través de WebAdministration Start-WebAppPool y Stop-WebAppPool

que tenía más éxito con:

%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe 

es decir

%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe -Command "$(ProjectDir)Powershell\Stop-AppPool.ps1" 

La razón resultó ser la mezcla de arquitecturas, como se detalla here (en la sección "Uso de secuencias de comandos de Windows PowerShell para automatizar tareas en Visual Studio"):

Es importante que utilice la ruta de acceso virtual% windir% \ SysNative y no el camino real de C: \ Windows \ System32. La razón para esto es que Visual Studio 2010 es una aplicación de 32 bits que necesita llamar a la versión de 64 bits de powershell.exe para cargar correctamente el complemento Microsoft.SharePoint.Powershell.

Cuestiones relacionadas