Consultar schtasks con Powershell

8

En una máquina con Windows 7 que estoy intentando, puedo ejecutar una consulta para ver todas las tareas programadas usando schtasks.exe

Esto está bien, pero también me gustaría filtrar el conjunto de resultados usando algo como

schtasks /query | where { $_.TaskName -eq "myTask" } 

El problema es que no estas tareas devuelven una lista con el formato adecuado para la función where para trabajar.

También he intentado:

schtasks /query /FO LIST
schtasks /query | format-list | where ....

esos tampoco funcionan.

¿Cuál sería la mejor manera de consultar las tareas en una computadora local usando Win7 y poder filtrarlas?

jdiaz
fuente
¿Qué pasa con las barras invertidas allí? Estoy bastante seguro de que eso no es lo que schtasksespera allí, sino más bien una barra diagonal.
Joey
¡decir ah! tienes razón. Lo he corregido arriba
jdiaz

Respuestas:

8

Podría intentar utilizar schtasks, lo que le dejará analizar el texto. Esto es casi siempre propenso a errores, y definitivamente más difícil de lo que es tomar la salida de un comando.

Resulta que hay un módulo TaskScheduler en PowerShellPack . Una vez que instale el paquete de PowerShell, para obtener todas las tareas programadas, use:

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

Como se trata de objetos reales, para encontrar una tarea de un nombre en particular, puede usar:

Get-ScheduledTask -Recurse |  Where-Object { $_.Name -like "*Task*"}

En general, encontrará que la comunidad de PowerShell ha tomado mucho más difícil usar líneas de comando, como schtasks, y las ha convertido en cmdlets fáciles de usar, como Get-ScheduledTask.

Ver también:

Envío de correos electrónicos automatizados utilizando el módulo TaskScheduler

Espero que esto ayude

Comenzar a automatizar
fuente
1
Esto funciona muy bien si está utilizando cajas Win2k8 (o vista / W7). Desafortunadamente, no funciona con servidores W2k3 (que todavía son muy comunes en mi entorno).
Mike Shepard
@MikeShepard Si quieres los juguetes nuevos, debes dejar de usar sistemas operativos de 11 años.
Ryan Ries
1
Esa es la historia de mi carrera. :-(
Mike Shepard
2

si no necesita hacerlo en powershell, lo siguiente funcionará

schtasks / query | findtr / i "mytask"

ps versión
schtasks / query | ? {$ _ -como 'mytask'}

Tony Roth
fuente
¿Alguna muestra de código fuente completo para crear, consultar y eliminar tareas usando PS?
Kiquenet
2

Aquí hay una publicación de blog que escribí sobre hacer esto. Esencialmente, tomé el resultado de / FO LIST / V, lo escribí en un archivo y lo importé nuevamente como objetos usando import-csv

Mike Shepard
fuente
2
Estás en el camino correcto, pero escribir en un archivo temporal no es necesario aquí: schtasks /query /fo csv /v|convertfrom-csvfunciona bien
Joey
esto es ordenado pero aún no es fácil de consultar
jdiaz
Johannes: tienes razón, pero realmente (realmente) no me gustan las propiedades que tienen espacios / dos puntos / barras incrustados. jdiaz: ¿Qué no es consultable? El guión que publiqué y la revisión de Johannes devuelven objetos nativos de PowerShell con propiedades. Deben ser tan consultables como cualquier otra entidad de PowerShell.
Mike Shepard
1
Verdaderamente, son consultables ... schtasks /query /fo csv /v /s "myserver" | convertfrom-csv | Select TaskName, "Last Run Time", Author | ? {$_.Author -notmatch "microsoft|N/A|Author"}le proporcionarán todas las tareas programadas personalizadas que tenga.
SliverNinja - MSFT
2

Puedes probar:

schtasks /query /FO CSV | ConvertFrom-CSV | Where { $_.TaskName -eq "myTask" } 

El truco está en convertir la salida a CSV primero, y luego de vuelta a un objeto de PowerShell.

Alex
fuente
0

Lo estás pensando demasiado.

Línea de comandos para lo que desea schtasks / query / s% computername% | FIND / I "% name_of_task%"

ejemplo schtasks / query / s server01 | FIND / I "horario"


fuente
-2

Las mejores opciones son de Alex porque no necesita biblioteca y convertirá las respuestas de la cadena de schtasks en el objeto Powershell.

Juan andres ramirez
fuente