Pregunta

Tengo algunas líneas de código de PowerShell que me gustaría usar como script automatizado.La forma en que me gustaría que pudiera funcionar es poder llamarlo usando una de las siguientes opciones:

  1. Una línea de comando que abre PowerShell, ejecuta el script y cierra PowerShell (esto se usaría para una rutina de compilación global)
  2. Un archivo en el que puedo hacer doble clic para ejecutar lo anterior (usaría este método cuando pruebe manualmente los componentes de mi proceso de compilación)

He estado revisando la documentación de PowerShell en línea y, aunque puedo encontrar muchos scripts, no he podido encontrar instrucciones sobre cómo hacer lo que necesito.Gracias por la ayuda.

¿Fue útil?

Solución

Guarde su script como un archivo .ps1 y ejecútelo usando powershell.exe, así:

powershell.exe .\foo.ps1

Asegúrese de especificar la ruta completa al script y de haber establecido su nivel de política de ejecución al menos en "RemoteSigned" para que se puedan ejecutar scripts locales sin firmar.

Otros consejos

De http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

Si está dispuesto a manchar su hermoso script de PowerShell con un poco de CMD, puede usar un truco políglota de PowerShell-CMD.Guarde su script de PowerShell como un archivo .CMD y coloque esta línea en la parte superior:

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

Si necesita respaldar los argumentos citados, existe una versión más larga, que también permite comentarios.(tenga en cuenta el inusual truco de comentarios de CMD de doble @).

@@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
@@:: Any non-PowerShell content must be preceeded by "@@"
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF

Fuente para la respuesta de Matt.

Puedo ejecutarlo haciendo doble clic en un archivo creando un archivo por lotes con lo siguiente:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File

Ejecutar script automáticamente desde otro script (p. ej.Archivo por lotes)

Como sugirió Matt Hamilton, simplemente cree su script PowerShell .ps1 y llámelo usando:

PowerShell C:\Path\To\YourPowerShellScript.ps1

o si el directorio de trabajo de su archivo por lotes es el mismo directorio en el que se encuentra el script de PowerShell, puede usar una ruta relativa:

PowerShell .\YourPowerShellScript.ps1

Y antes de que esto funcione, deberá configurar la Política de ejecución de la PC, lo cual le muestro cómo hacerlo a continuación.


Ejecutar script manualmente Método 1

Puede ver la publicación de mi blog para más información, pero esencialmente cree su archivo de script PowerShell .ps1 para hacer lo que quiera y luego cree un archivo por lotes .cmd en el mismo directorio y use lo siguiente para el contenido del archivo:

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

Reemplazo MiPowerShellScript.ps1 en la tercera línea con el nombre del archivo de su script de PowerShell.

Esto le permitirá simplemente hacer doble clic en el archivo por lotes para ejecutar su script de PowerShell y evitará que tenga que cambiar su Política de ejecución de PowerShell.

La publicación de mi blog también muestra cómo ejecutar el script de PowerShell como administrador si eso es algo que necesita hacer.


Ejecutar script manualmente Método 2

Alternativamente, si no desea crear un archivo por lotes para cada uno de sus scripts de PowerShell, puede cambiar el comportamiento predeterminado del script de PowerShell de Editar a Ejecutar, lo que le permitirá hacer doble clic en sus archivos .ps1 para ejecutarlos.

Hay una configuración de registro adicional que querrá modificar para poder ejecutar scripts cuya ruta de archivo contenga espacios.Muestro cómo hacer ambas cosas. en esta publicación de blog.

Sin embargo, con este método, primero deberá configurar su política de ejecución para permitir la ejecución de scripts.Solo necesita hacer esto una vez por PC y puede hacerlo ejecutando esta línea en un símbolo del sistema de PowerShell.

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned -Force es el comando que realmente cambia la política de ejecución;esto lo establece en Firmado remoto, para que puedas cambiarlo por otra cosa si lo necesitas.Además, esta línea ejecutará automáticamente PowerShell como administrador, lo cual es necesario para cambiar la política de ejecución.

puedes usar este comando:powershell.exe -argumento c:\scriptPath\Script.ps1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top