Comprende el código bien antes de aplicarlo a tu proyecto si ttienes algo que aportar puedes decirlo en los comentarios.
Solución:
Si el problema que tiene es con la política de ejecución, también puede establecer la política de ejecución de una invocación específica de PowerShell. Esto es lo que suelo hacer cuando ejecuto PowerShell a través de una tarea programada:
powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File \pathtoscript.ps1
¿Por qué?
-Sin perfil
Esto garantiza que no confíe en nada en el perfil de PowerShell del usuario y evita la sobrecarga de ejecutar ese código adicional.
-Sin logo
Esto en su mayoría no importa; tal vez lo haga si está capturando el resultado de su secuencia de comandos. Sobre todo me hace sentir mejor.
-No interactivo
Garantiza que su tarea no esperará indefinidamente si algo en su secuencia de comandos le pregunta al usuario de forma inesperada. Con este cambio, la secuencia de comandos se cerrará en su lugar; al menos tendrás un código de error en lugar de un script colgado.
-Omisión de política de ejecución
Puedes usar Unrestricted
aquí o cualquier política de ejecución que desee. Este es probablemente el que más necesitas..
Por qué prefiero configurar la política de ejecución de esta manera:
Porque no quiero que la tarea dependa de una configuración global no predeterminada que pueda tener otras razones para cambiar en el futuro. Si algún otro proceso depende de una política de ejecución diferente, entonces no está reñido con su tarea de esta manera.
Además, siempre es bueno no tener que cambiar los valores predeterminados. Menos para recordar/documentar/probar.
Prima
Consulte la respuesta de JohnLBevan para conocer algunas causas adicionales de 0x1
resultar en una tarea programada.
Hay varias causas posibles para que un script de PowerShell invocado por el programador de tareas se complete con código 0x1
:
- La política de ejecución no permite que se ejecute el script. Consulte la excelente respuesta de Briantist para obtener detalles sobre esto.
- La tarea no tiene la
Run with highest privileges
bandera (casilla de verificación en la pestaña General de la tarea) habilitada.* - Los parámetros se pasan al script de forma incorrecta. Si se utiliza un enfoque como
-File ".MyScript.ps1" -Parameter1 'Demo'
en su lugar intente:-Command "& .MyScript.ps1 -Parameter1 'Demo'"
*Como señala Ben en los comentarios, Run with highest privileges
no tiene que estar habilitado / depende si el script requiere derechos de administrador (por ejemplo, si algunos comandos como Set-ExecutionPolicy
o Stop-Process
puede requerirlos). Si no está seguro, intente marcar la opción para ver si soluciona su problema; si no parece hacer una diferencia, déjelo sin marcar.
He hecho esto antes y tuve problemas similares. Casi siempre es la configuración de seguridad de PowerShell. Lo más obvio es que verificaría dos veces su política de ejecución (suponiendo que la haya configurado).
¿Con qué usuario se ejecuta la tarea? ¿Ese usuario ha ejecutado un script de PowerShell antes? Si no recuerdo mal, se le solicita a cada usuario que “permita” que se ejecuten los scripts de PowerShell (S/N), cuando ejecuta un script por primera vez (independientemente de la política de ejecución). Eso me ha mordido antes. Tratar:
- iniciar sesión como ese usuario
- comprobar la política de ejecución
- inicie el script desde un indicador de PowerShell
- responda a las indicaciones que siguen.
Después de la primera ejecución, no debería tener que preocuparse por eso nuevamente, y debería ejecutarse desde el programador de tareas sin problemas.
Dependiendo de la seguridad de su dominio, es posible que también deba establecer la política de ejecución de grupo. Aquí hay un artículo que detalla cómo hacerlo, así como un par de otras cosas para verificar: Seguridad de PowerShell.
Ten en cuenta dar difusión a esta división si te fue útil.