Exchange PowerShell en una tarea programada se ejecuta para siempre

8

Tengo un par de scripts de PowerShell de Exchange 2010 que me gustaría ejecutar como Tareas programadas.

Si inicio PowerShell usando "Ejecutar como usuario diferente", puedo ejecutar los scripts y se ejecutan correctamente.

Si programo una tarea con ese mismo usuario, la tarea permanece en el estado Ejecutando para siempre.

¿Cómo puedo averiguar dónde se estanca la tarea?

Como referencia, así es como habilito las cosas de Exchange:

. 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'
Connect-ExchangeServer -auto

Y aquí están las formas en que he intentado ejecutar el script desde el Programador de tareas:

  • powershell -command "& {. 'c: \ windows \ script.ps1'}"
  • powershell -file 'c: \ windows \ script.ps1'
  • archivo de PowerShell "c: \ windows \ script.ps1"

Todo con el mismo resultado. Grr ...

cuello largo
fuente
Comenté tarde a la fiesta, pero tuve el mismo comportamiento. Una tarea programada registrada usando PowerShell Register-ScheduledJobnunca 'terminó' terminó una vez que cerré mi consola PowerShell e ISE.
user4317867

Respuestas:

3

Debe modificar su política de ejecución o especificarla -ExecutionPolicy Bypasscomo un parámetro de línea de comandos.

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass
TheCompWiz
fuente
1
Agregué la opción ExecutionPolicy a mis parámetros de línea de comando. Ningún cambio; La tarea aún se ejecuta para siempre.
Longneck
2

No estoy seguro si así es como lo está haciendo, pero cuando estoy ejecutando scripts de PowerShell a través del programador de tareas, uso la acción "Iniciar un programa" y selecciono powershell y luego agrego los argumentos desde allí. Eso podría ser lo que estás haciendo aquí, pero no está claro. Aquí hay una captura de pantalla: ingrese la descripción de la imagen aquí

Por la política de ejecución TheCompWiz también podría ser un problema.

ZnewmaN
fuente
Esa ni siquiera es una sintaxis válida de línea de comandos para powershell.exe, pero solo por el gusto lo probé. La tarea falló de inmediato.
Longneck
Interesante porque todas mis tareas diarias de PowerShell funcionan de esa manera y funcionan bien.
ZnewmaN
C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -command "& 'c: \ windows \ script.ps1'"
ZnewmaN
Ah, ahí está la diferencia. su captura de pantalla no muestra el-command
longneck
Sí, en realidad yo personalmente no uso -command, pero probablemente sea el uso adecuado.
ZnewmaN
0

Yo tuve el mismo problema. En mi caso, la solución fue especificar el directorio "inicio en" (mi script leería el contenido de un archivo que no encontraría porque no especifiqué la ruta completa al archivo).

Azimut
fuente
0

Tuve el mismo problema y el comentario de "user279399" para usar el comando taskkill fue muy útil, solo necesitaba modificaciones. Aquí está mi solución al final de la sintaxis del argumento

taskkill /f /fi "USERNAME eq domain\exchadmin" /im powershell.exe

Este comando mata solo la sesión de PowerShell que se ejecuta bajo esa cuenta de usuario. Es una buena práctica tener una cuenta de administrador de intercambio separada para ejecutar tareas programadas.

Leon B
fuente
-3

Intente agregar al final de su script [taskkill / f / im "powershell.exe"] esto matará todos los procesos "powershell.exe". No sé cómo matar el proceso actual de power-shell (equivalente a [cmd.exe / c]). Pero hará el truco.

usuario279399
fuente
¿Y si hubiera otros scripts de PowerShell ejecutándose, probablemente haciendo algo importante? ¿Matarías estos procesos sin preguntar? En un entorno de producción? Como una rutina? ¡¿Seriamente?!
Esa Jokinen