command line - help - Configurar el script de PowerShell para la ejecución automática
la ejecucion de scripts esta deshabilitada windows 10 (5)
Tengo algunas líneas de código de PowerShell que me gustaría utilizar como script automático. La forma en que me gustaría que funcione es poder llamarla usando una de las siguientes opciones:
- 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)
- Un archivo en el que puedo hacer doble clic para ejecutar lo anterior (utilizaría este método al probar 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.
Guarde su script como un archivo .ps1 y ejecútelo usando powershell.exe, como este:
powershell.exe ./foo.ps1
Asegúrese de especificar la ruta completa de la secuencia de comandos y asegúrese de haber configurado el nivel de su política de ejecución en al menos "RemoteSigned" para que se puedan ejecutar scripts locales sin firmar.
Fuente de la respuesta de Matt.
Puedo hacer que se ejecute haciendo doble clic en un archivo creando un archivo por lotes con lo siguiente:
C:/WINDOWS/system32/windowspowershell/v1.0/powershell.exe LocationOfPS1File
De http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx
Si está dispuesto a mancillar su hermosa secuencia de comandos de PowerShell con un poco de CMD, puede usar un truco de PowerLink polimérico de PowerShell. Guarde su secuencia de comandos 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 admitir argumentos entre comillas, hay una versión más larga, que también permite comentarios. (Observe el inusual truco de comentario de CMD de double @).
@@:: 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
Ejecutar script automáticamente desde otra secuencia de comandos (por ejemplo, archivo por lotes)
Como Matt Hamilton sugirió, simplemente cree su secuencia de comandos .ps1 de PowerShell 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 está 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, que le mostraré a continuación.
Ejecutar script manualmente Método 1
Puede ver mi publicación en el blog para obtener más información , pero esencialmente crea tu archivo de comandos .ps1 de PowerShell para hacer lo que quieras, y luego crea un archivo por lotes .cmd en el mismo directorio y usa lo siguiente para los contenidos del archivo:
@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& ''%PowerShellScriptPath%''"
Reemplazando MyPowerShellScript.ps1 en la 3ra línea con el nombre de archivo de su secuencia de comandos de PowerShell.
Esto le permitirá hacer doble clic en el archivo por lotes para ejecutar su secuencia de comandos de PowerShell y evitará tener 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 debe hacer.
Ejecutar la secuencia de comandos 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 del script predeterminado de PowerShell de Editar a Ejecutar, lo que le permite hacer doble clic en sus archivos .ps1 para ejecutarlos.
Existe una configuración de registro adicional que deseará modificar para que pueda ejecutar scripts cuya ruta de archivo contiene espacios. Muestro cómo hacer ambas cosas en esta publicación de blog .
Sin embargo, con este método, primero deberá establecer 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 RemoteSigned , por lo que puede cambiarlo a otra cosa si lo necesita. Además, esta línea ejecutará automáticamente PowerShell como administrador para usted, lo cual es necesario para cambiar la política de ejecución.
puede usar este comando: powershell.exe -argument c: / scriptPath / Script.ps1