Schtasks mit Powershell abfragen

8

Auf einem Windows7-Computer, den ich versuche, kann ich eine Abfrage ausführen, um alle geplanten Aufgaben mit schtasks.exe anzuzeigen

Das ist in Ordnung, aber ich möchte auch die Ergebnismenge mit so etwas filtern

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

Das Problem ist, dass diese Schtasks keine ordnungsgemäß formatierte Liste für die Where-Funktion zurückgeben.

Ich habe auch versucht:

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

die funktionieren auch nicht.

Was wäre der beste Weg, um die Schtasks auf einem lokalen Computer mit Win7 abzufragen und sie zu filtern

jdiaz
quelle
Was ist mit den Backslashes da drin? Ich bin mir ziemlich sicher, dass dies dort nicht schtaskserwartet wird, sondern eher ein Schrägstrich.
Joey
Ha! Du hast recht. Ich habe es oben korrigiert
jdiaz

Antworten:

8

Sie könnten versuchen, schtasks zu verwenden, wodurch Sie Text analysieren können. Dies ist fast immer fehleranfällig und definitiv schwieriger als die Ausgabe eines Befehls.

Es gibt zufällig ein TaskScheduler-Modul im PowerShellPack . Verwenden Sie nach der Installation des PowerShell-Pakets Folgendes, um alle geplanten Aufgaben abzurufen:

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

Da es sich um reale Objekte handelt, können Sie zum Auffinden einer Aufgabe mit einem bestimmten Namen Folgendes verwenden:

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

Im Allgemeinen werden Sie feststellen, dass die Verwendung von Befehlszeilen wie schtasks in der PowerShell-Community viel schwieriger geworden ist und sie in benutzerfreundliche Cmdlets wie Get-ScheduledTask umgewandelt hat.

Siehe auch:

Senden automatisierter E-Mails mit dem TaskScheduler-Modul

Hoffe das hilft

Starten Sie die Automatisierung
quelle
1
Dies funktioniert hervorragend, wenn Sie Win2k8-Boxen (oder Vista / W7) verwenden. Leider funktioniert es nicht mit W2k3-Servern (die in meiner Umgebung immer noch sehr verbreitet sind).
Mike Shepard
@MikeShepard Wenn Sie die neuen Spielzeuge möchten, müssen Sie die Verwendung von 11 Jahre alten Betriebssystemen einstellen.
Ryan Ries
1
Das ist die Geschichte meiner Karriere. :-(
Mike Shepard
2

Wenn Sie dies nicht in Powershell tun müssen, funktioniert Folgendes

schtasks / query | findstr / i "mytask"

ps version
schtasks / query | ? {$ _ -wie 'mytask'}

Tony Roth
quelle
Gibt es ein vollständiges Quellcodebeispiel zum Erstellen, Abfragen und Löschen von Aufgaben mit PS?
Kiquenet
2

Hier ist ein Blog-Beitrag, den ich darüber geschrieben habe. Im Wesentlichen nahm ich die Ausgabe von / FO LIST / V, schrieb sie in eine Datei und importierte sie mit import-csv wieder als Objekte

Mike Shepard
quelle
2
Sie sind auf dem richtigen Weg, aber das Schreiben in eine temporäre Datei ist hier nicht erforderlich: schtasks /query /fo csv /v|convertfrom-csvfunktioniert einwandfrei
Joey
das ist ordentlich, aber immer noch nicht leicht abfragbar
jdiaz
Johannes: Sie haben Recht, aber ich mag Eigenschaften, in die Leerzeichen / Doppelpunkte / Schrägstriche eingebettet sind, wirklich (wirklich) nicht. jdiaz: Was ist nicht abfragbar? Das Skript, das ich gepostet habe, und Johannes 'Revision geben beide native Powershell-Objekte mit Eigenschaften zurück. Sie sollten genauso abfragbar sein wie alle anderen Powershell-Entitäten.
Mike Shepard
1
Wirklich - sie sind abfragbar ... schtasks /query /fo csv /v /s "myserver" | convertfrom-csv | Select TaskName, "Last Run Time", Author | ? {$_.Author -notmatch "microsoft|N/A|Author"}bieten Ihnen alle benutzerdefinierten geplanten Aufgaben, die Sie haben.
SliverNinja - MSFT
2

Sie können versuchen:

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

Der Trick besteht darin, die Ausgabe zuerst in CSV und dann zurück in ein Powershell-Objekt zu konvertieren.

Alex
quelle
0

Du überdenkst es.

Befehlszeile für das, was Sie wollen schtasks / query / s% Computername% | FIND / I "% name_of_task%"

Beispiel schtasks / query / s server01 | FIND / I "Zeitplan"


quelle
-2

Die besten Optionen stammen von Alex, da Sie keine Bibliothek benötigen und die Antworten der Zeichenfolge aus Schtasks im Powershell-Objekt konvertieren.

Juan Andres Ramirez
quelle