Interroger des schtasks à l'aide de Powershell

8

Sur une machine Windows7, j'essaie de pouvoir exécuter une requête pour afficher toutes les tâches planifiées à l'aide de schtasks.exe

C'est bien mais je voudrais aussi filtrer le jeu de résultats en utilisant quelque chose comme

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

Le problème est que je ne renvoie pas une liste correctement formatée pour que la fonction where fonctionne.

J'ai aussi essayé:

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

ça ne marche pas non plus.

Quelle serait la meilleure façon d'interroger les schtasks sur un ordinateur local à l'aide de Win7 et de pouvoir les filtrer

jdiaz
la source
Qu'y a-t-il avec les barres obliques inverses là-dedans? Je suis assez sûr que ce n'est pas ce qui schtaskss'y attend, mais plutôt une barre oblique.
Joey
Ha! tu as raison. Je l'ai corrigé ci-dessus
jdiaz

Réponses:

8

Vous pouvez essayer d'utiliser des schtasks, ce qui vous laissera analyser le texte. C'est presque toujours sujet aux erreurs, et certainement plus difficile que de prendre la sortie d'une commande.

Il se trouve qu'il y a un module TaskScheduler dans PowerShellPack . Une fois que vous avez installé le pack PowerShell, pour obtenir toutes les tâches planifiées, utilisez:

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

Comme ce sont des objets réels, pour trouver une tâche d'un nom particulier, vous pouvez utiliser:

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

En général, vous constaterez que la communauté PowerShell a pris beaucoup plus de mal à utiliser les lignes de commande, comme les schtasks, et les a transformées en applets de commande faciles à utiliser, comme Get-ScheduledTask.

Voir également:

Envoi d'e-mails automatisés à l'aide du module TaskScheduler

J'espère que cela t'aides

Démarrage-automatisation
la source
1
Cela fonctionne très bien si vous utilisez des boîtes Win2k8 (ou Vista / W7). Malheureusement, cela ne fonctionne pas avec les serveurs W2k3 (qui sont encore très courants dans mon environnement).
Mike Shepard
@MikeShepard Si vous voulez les nouveaux jouets, vous devez cesser d'utiliser des systèmes d'exploitation vieux de 11 ans.
Ryan Ries
1
Voilà l'histoire de ma carrière. :-(
Mike Shepard
2

si vous n'avez pas besoin de le faire en PowerShell, alors ce qui suit fonctionnera

schtasks / query | findstr / i "mytask"


schtasks / requête de la version ps | ? {$ _-like 'mytask'}

Tony Roth
la source
tout exemple de code source complet pour créer, interroger et supprimer des tâches à l'aide de PS?
Kiquenet
2

Voici un article de blog que j'ai écrit à ce sujet. Essentiellement, j'ai pris la sortie de / FO LIST / V, l'ai écrit dans un fichier et l'ai importé en tant qu'objets en utilisant import-csv

Mike Shepard
la source
2
Vous êtes sur la bonne voie mais il n'est pas nécessaire d'écrire dans un fichier temporaire ici: ça schtasks /query /fo csv /v|convertfrom-csvmarche très bien
Joey
c'est soigné mais toujours pas facilement interrogable
jdiaz
Johannes: vous avez raison, mais je n'aime pas vraiment (vraiment) les propriétés qui ont des espaces / deux-points / barres obliques intégrés. jdiaz: Qu'est-ce qui n'est pas interrogable? Le script que j'ai publié et la révision de Johannes renvoient tous deux des objets PowerShell natifs avec des propriétés. Ils devraient être aussi interrogeables que toutes les autres entités PowerShell.
Mike Shepard
1
Vraiment - ils sont interrogeables ... schtasks /query /fo csv /v /s "myserver" | convertfrom-csv | Select TaskName, "Last Run Time", Author | ? {$_.Author -notmatch "microsoft|N/A|Author"}vous fournira toutes les tâches planifiées personnalisées que vous avez.
SliverNinja - MSFT
2

Vous pouvez essayer:

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

L'astuce consiste à convertir d'abord la sortie en CSV, puis à revenir à un objet PowerShell.

Alex
la source
0

Vous y pensez trop.

Ligne de commande pour ce que vous voulez schtasks / query / s% computername% | FIND / I "% name_of_task%"

exemple schtasks / query / s server01 | FIND / I "planning"


la source
-2

La meilleure option est d'Alex car vous n'avez pas besoin de bibliothèque et vous convertirez les réponses de la chaîne à partir de schtasks dans l'objet Powershell.

Juan Andres Ramirez
la source