Сделайте запрос для выполнения задач с помощью Powershell

8

На компьютере с Windows7 я пытаюсь запустить запрос для просмотра всех запланированных задач с помощью schtasks.exe

Это хорошо, но я также хотел бы отфильтровать набор результатов, используя что-то вроде

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

Проблема в том, что я не считаю, что эта функция возвращает правильно отформатированный список для работы функции where.

Я также попробовал:

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

те тоже не работают.

Каков был бы лучший способ запросить задачи на локальном компьютере с помощью Win7 и иметь возможность фильтровать их

jdiaz
источник
Что там с обратными слешами? Я вполне уверен, что это не то, что schtasksожидает, а скорее слеш.
Джои
ха! вы правы. Я исправил это выше
jdiaz

Ответы:

8

Вы можете попытаться использовать schtasks, который оставит вам анализ текста. Это почти всегда подвержено ошибкам и определенно сложнее, чем получение выходных данных команды.

В PowerShellPack есть модуль TaskScheduler . После установки пакета PowerShell, чтобы получить все запланированные задачи, используйте:

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

Поскольку это реальные объекты, чтобы найти задачу с определенным именем, вы можете использовать:

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

В общем, вы обнаружите, что сообществу PowerShell стало намного сложнее использовать командные строки, такие как schtasks, и превратили их в простые в использовании командлеты, такие как Get-ScheduledTask.

Смотрите также:

Отправка автоматических писем с помощью модуля TaskScheduler

Надеюсь это поможет

Start-Automating
источник
1
Это прекрасно работает, если вы используете коробки Win2k8 (или Vista / W7). К сожалению, он не работает с серверами W2k3 (которые все еще очень распространены в моей среде).
Майк Шепард
@MikeShepard Если вы хотите новые игрушки, вы должны прекратить использование 11-летних операционных систем.
Райан Райс
1
Это история моей карьеры. :-(
Майк Шепард
2

если вам не нужно делать это в powershell, то будет работать следующее

счеты / запрос | findstr / i "mytask"

PS Версия
Schtasks / запрос | ? {$ _ -подобная 'mytask'}

Тони Рот
источник
какой-нибудь полный пример исходного кода для создания, запроса и удаления задач с использованием PS?
Kiquenet
2

Вот сообщение в блоге, которое я написал об этом. По сути, я взял вывод / FO LIST / V, записал его в файл и импортировал обратно как объекты, используя import-csv

Майк Шепард
источник
2
Вы на правильном пути, но запись во временный файл здесь не нужна: schtasks /query /fo csv /v|convertfrom-csvотлично работает
Joey
это опрятно, но все еще не легко подвергнуть сомнению
jdiaz
Йоханнес: вы правы, но мне очень (очень) не нравятся свойства со встроенными пробелами / двоеточиями / косыми чертами. jdiaz: что не подлежит запросу? Написанный мною сценарий и ревизия Йоханнеса возвращают нативные объекты powershell со свойствами. Они должны быть такими же запрашиваемыми, как и любые другие объекты PowerShell.
Майк Шепард
1
Поистине - они могут быть запрошены ... schtasks /query /fo csv /v /s "myserver" | convertfrom-csv | Select TaskName, "Last Run Time", Author | ? {$_.Author -notmatch "microsoft|N/A|Author"}предоставит вам все запланированные вами задачи.
SliverNinja - MSFT
2

Вы можете попробовать:

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

Хитрость заключается в том, чтобы сначала преобразовать вывод в CSV, а затем обратно в объект powershell.

Alex
источник
0

Вы думаете об этом.

Командная строка для того, что вы хотите schtasks / query / s% computername% | FIND / I "% name_of_task%"

пример schtasks / query / s server01 | НАЙТИ / I "расписание"


источник
-2

Лучший вариант от Алекса, потому что вам не нужна библиотека, и вы конвертируете ответы строки из schtasks в объекте Powershell.

Хуан Андрес Рамирес
источник