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


8

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

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

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

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

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

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

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

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


Что там с обратными слешами? Я вполне уверен, что это не то, что 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

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


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.


0

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

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

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


-2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.