Войти

Показать полную графическую версию : [решено] Получение статуса задания планировщика с помощью schtasks


Vadikan
27-01-2011, 15:49
Всем привет!

Вопрос, наверное, очень простой для гуру ;) Есть команда
schtasks /query /fo list /tn Microsoft\Windows\Defrag\ScheduledDefrag
Выдает:
Folder: Microsoft\Windows\Defrag
HostName: TEST374
TaskName: Microsoft\Windows\Defrag\ScheduledDefrag
Next Run Time: 2/2/2011 2:47:45 AM
Status: Ready
Logon Mode: Interactive/Background

Альтернативный вариант - без /fo list. Вывод:
Folder: Microsoft\Windows\Defrag
TaskName Next Run Time Status
======================================== ====================== ===============
ScheduledDefrag 2/2/2011 1:29:58 AM Ready

Как получить значение для Status в переменную?
Спасибо!

gora
27-01-2011, 16:05
Есть команда »
Уточните систему. У меня на ХР эта команда выдаетОшибка: Неправильный параметр или аргумент - '/tn'.
Введите "SCHTASKS /QUERY /?" для получения справки по использованию.
В справке такой ключ отсутствует.

Vadikan
27-01-2011, 16:14
Уточните систему »
Конфигурация у меня заполнена, и мне не нужно для ХР :) Там и задания такого нет.

Petya V4sechkin
27-01-2011, 16:32
Vadikan, вот, на коленке:
@Echo Off
SetLocal EnableExtensions

For /F "Tokens=1* Skip=5 Delims=: " %%I In ('Schtasks /Query /Fo List /Tn Microsoft\Windows\Defrag\ScheduledDefrag') Do (
Set Status=%%J
GoTo ExitFor
)
:ExitFor
Echo Статус задания: %Status%

Проверял на русской 7 (на английской тоже должно работать).

Vadikan
27-01-2011, 16:43
Petya V4sechkin, спасибо, работает!

amel27
27-01-2011, 16:58
вот, на коленке »
так должно быть быстрей, переход по метке - очень медленная команда:
@echo off

for /f "tokens=1* delims=: " %%i in (
'schtasks /query /fo List /tn Microsoft\Windows\Defrag\ScheduledDefrag'
) do if /i "%%i"=="Status" set "STATUS=%%j"

echo Статус задания: %STATUS%
pause>nul

P.S. 7-ки под рукой нет проверить (

Petya V4sechkin
27-01-2011, 17:01
if /i "%%i"=="Status"
На русской 7 не получится.

amel27
27-01-2011, 17:36
На русской 7 не получится. »
для поддержки 2-го языка можно добавить ELSE IF, для SKIP может быть так:
@echo off

for /f "skip=5 tokens=1* delims=: " %%i in (
'schtasks /query /fo List /tn Microsoft\Windows\Defrag\ScheduledDefrag'
) do if not defined STATUS set "STATUS=%%j"

echo Статус задания: %STATUS%
pause>nul

...хотя из примера напрашивается SKIP=4... :idontnow:

Petya V4sechkin
27-01-2011, 19:41
хотя из примера напрашивается SKIP=4
Там еще пустая строчка в начале.

Vadikan
27-01-2011, 23:16
amel27, спасибо, так тоже работает.

Добавлю вариант на PowerShell от Василия Гусева

$tasks = [xml](schtasks /query /tn Microsoft\Windows\Defrag\ScheduledDefrag /xml one)
$($tasks.Task.settings.enabled)

Сам XML можно посмотреть командой в круглых скобках из первой строки, либо в не очень приглядном виде вывести так: $tasks.outerxml

Я всегда снизу вверх смотрю на гуру этого форума, которым по силу любые задачи на CMD/VBS, но нельзя не отметить, что работа PowerShell с XML значительно упрощает решение :)

Да, я помню, что задал категорией темы CMD, мне было нужно именно это, но теперь поменял на "разное".




© OSzone.net 2001-2012