2

Я хочу отобразить все детали об определенной задаче.

Например, у меня есть "MyTask", в котором есть несколько программ для выполнения действий, как показано ниже:

Я хочу увидеть список программ, которые запускает задача в версии командной строки планировщика задач (или: schtasks).

Итак, когда я бегу:

SCHTASKS /Query /TN "\Microsoft\Windows\MyTask" /FO list /v

Но я получаю только фразу "множественные действия" вместо реальных действий / программ, запускаемых как показано ниже:

Я знаю, что мог бы использовать аргумент /XML чтобы показать список программ, которые нужно запустить, но что, если у меня будет много задач для получения результатов? Я хочу, чтобы мой вывод был списком, т.е. /FO list

Как мне это решить?

2 ответа2

2

Пакетный список сценариев Все имена заданий планировщика заданий и команды

Ниже приведен пакетный скрипт, который будет работать с Windows 7 и Windows 10.

По сути это будет:

  1. Запустите schtasks с ключом /XML и передайте весь XML- контент, который он читает, с помощью команды findstr с помощью переключателя I (без учета регистра), отфильтровывая его, чтобы перенаправить только строки, содержащие строки <!-- и <command> качестве вывода плоский файл.
  2. Затем содержимое плоского файла запускается с помощью динамического сценария PowerShell , который заменяет теги XML именами полей с более подходящим форматированием, обрезает все начальные пробелы во всех строках, удаляет все пустые строки и, наконец, ставит новую строку перед каждой Task Name поля, но он пропустит первую строку, так как ему не нужно иметь строку перед ним - самую верхнюю строку в файле.

Примечание: см. Раздел « Gotchas » ниже для получения сведений о потенциальных аномалиях и пунктах, на которые следует обратить внимание.


Пакетный скрипт

@ECHO ON

SET RptFile=%temp%\TaskSchedReport.txt

:: -- This routine sets temp files
SET RptFileTmp=%temp%\~tmpTaskSchedReport.txt
IF EXIST "%RptFileTmp%" DEL /Q /F "%RptFileTmp%"
SET TmpPSScript=%Temp%\~tmpScheduleTasks.ps1
IF EXIST "%TmpPSScript%" DEL /Q /F "%TmpPSScript%"

:SchTask
schtasks /query /XML | Findstr /I "<!-- <command>">"%RptFileTmp%"

:PowerShell
ECHO $origFile = "%RptFileTmp%"                                                    >> "%TmpPSScript%"
ECHO $NewFile = "%RptFile%"                                                        >> "%TmpPSScript%"
ECHO $BlankLine = "`r`n"                                                           >> "%TmpPSScript%"
ECHO (Get-Content $origFile) ^| Foreach-Object {                                   >> "%TmpPSScript%"
ECHO     $_ -replace "<!-- ", 'Task Name (and path): ' -replace "<Command>", 'Command: ' -replace "<[^>]+>", '' -replace '^^\s+', '' -replace '(?m)^^\s*\r?\n', ''>> "%TmpPSScript%"
ECHO     } ^| Set-Content $NewFile                                                 >> "%TmpPSScript%"
ECHO (Get-Content $NewFile) ^| ? {$_.trim() -ne "" } ^| Set-Content $NewFile       >> "%TmpPSScript%"
ECHO (Get-Content $NewFile) ^| Foreach-Object {                                    >> "%TmpPSScript%"
ECHO     $_ -replace "Task Name ", ($BlankLine + "Task Name ") -replace "-->", ''  >> "%TmpPSScript%"
ECHO     } ^| Set-Content $NewFile                                                 >> "%TmpPSScript%"
ECHO (Get-Content $NewFile ^| Select-Object -Skip 1) ^| Set-Content $NewFile       >> "%TmpPSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%TmpPSScript%'"

:: -- Below will open file to view content with the default text editor
explorer.exe "%RptFile%"

Результаты

Task Name (and path): \Adobe Acrobat Update Task 
Command: C:\Program Files\Common Files\Adobe\ARM\1.0\AdobeARM.exe

Task Name (and path): \GoogleUpdateTaskMachineCore 
Command: C:\Program Files\Google\Update\GoogleUpdate.exe

Task Name (and path): \GoogleUpdateTaskMachineUA 
Command: C:\Program Files\Google\Update\GoogleUpdate.exe

Task Name (and path): \TopSecret 
Command: C:\Folder\CIA.exe
Command: C:\Folder\FBI.exe

Gotchas

Если вы заметили Task Name поля объекта без элемента Command поля под ним, что , как представляется, из - за системные задачи по расписанию и т.д. , которые имеют Actions , указанные в качестве значений Custom Handler , чем не может быть отредактированы увидеть примеры и снимки экрана ниже.

Пример (без команд)

Task Name (and path): \Microsoft\Windows\Shell\WindowsParentalControls 

Task Name (and path): \Microsoft\Windows\Shell\WindowsParentalControlsMigration 

Task Name (and path): \Microsoft\Windows\SideShow\AutoWake 

Task Name (and path): \Microsoft\Windows\SideShow\GadgetManager 

Task Name (and path): \Microsoft\Windows\SideShow\SessionAgent 

Task Name (and path): \Microsoft\Windows\SideShow\SystemDataProviders 

Настройки задания планировщика заданий (без команд / действий)


Дополнительные ресурсы

1

Поскольку вы говорите: « Я все еще хочу видеть имена задач относительно их действий » в комментарии, вы можете использовать приведенный ниже пример пакетного сценария, чтобы получить ожидаемый результат в Windows 7.

По сути это будет:

  1. Выполните команду запроса verbose schtasks, чтобы вывести вывод в файл csv
  2. С помощью встроенной команды Windows PowerShell convertfrom-csv она преобразует выходные данные csv в формат, подобный списку.
  3. Оттуда он будет использовать команду выбора PowerShell с параметром -property чтобы получить только значения из полей, которые вы хотите видеть только.
  4. Команда PowerShell где с оператором сравнения -notcontains отфильтровывает дополнительные объекты TaskName которые по какой-либо причине выгружают в файл csv с помощью команд schtasks .

Примечание. Вы более ограничены возможностями, которые вы можете и не можете использовать для этой задачи в Windows 7, по сравнению с более новыми операционными системами Windows, такими как Windows 10 .

Пакетный сценарий Явный

Возможно, вам придется поиграть с параметром -Width 256 и использовать большее или меньшее значение int.

@ECHO ON

SET RptFile=C:\Folder\Path\TaskSchedReport.txt
SET TmpPSScript=%Temp%\~tmpScheduleTasks.ps1
IF EXIST "%TmpPSScript%" DEL /Q /F "%TmpPSScript%"

ECHO schtasks /query /v /fo csv ^| ConvertFrom-CSV ^| >> "%TmpPSScript%"
ECHO Select -Property "TaskName","Task To Run" ^|     >> "%TmpPSScript%"
ECHO Where {$_.TaskName -notcontains "TaskName"} ^|   >> "%TmpPSScript%"
ECHO Out-File "%RptFile%" -Width 256                  >> "%TmpPSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%TmpPSScript%'"

:: -- Below will open file to view content with the default text editor
explorer.exe "%RptFile%"

EXIT

Фрагмент пакетного вывода

TaskName                                                                                                                         Task To Run                                                                                                                    
--------                                                                                                                         -----------                                                                                                                    
\Adobe Acrobat Update Task                                                                                                       C:\Program Files\Common Files\Adobe\ARM\1.0\AdobeARM.exe                                                                       
\Adobe Acrobat Update Task                                                                                                       C:\Program Files\Common Files\Adobe\ARM\1.0\AdobeARM.exe                                                                       
\GoogleUpdateTaskMachineCore                                                                                                     C:\Program Files\Google\Update\GoogleUpdate.exe /c                                                                             
\GoogleUpdateTaskMachineCore                                                                                                     C:\Program Files\Google\Update\GoogleUpdate.exe /c                                                                             
\GoogleUpdateTaskMachineUA                                                                                                       C:\Program Files\Google\Update\GoogleUpdate.exe /ua /installsource scheduler                                                   
\Microsoft\Microsoft Antimalware\Microsoft Antimalware Scheduled Scan                                                            c:\Program Files\Microsoft Security Client\\MpCmdRun.exe Scan -ScheduleJob -RestrictPrivileges                                 
\Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Automated)       COM handler                                                                                                                    
\Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Automated)       COM handler                                                                                                                    
\Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Manual)          COM handler                                                                                                                    
\Microsoft\Windows\Autochk\Proxy                                                                                                 %windir%\system32\rundll32.exe /d acproxy.dll,PerformAutochkOperations    

Пакетный скрипт Все

@ECHO ON

SET RptFile=C:\Folder\Path\TaskSchedReport.txt
SET TmpPSScript=%Temp%\~tmpScheduleTasks.ps1
IF EXIST "%TmpPSScript%" DEL /Q /F "%TmpPSScript%"

ECHO schtasks /query /v /fo csv ^| ConvertFrom-CSV ^| >> "%TmpPSScript%"
ECHO Where {$_.TaskName -notcontains "TaskName"} ^|   >> "%TmpPSScript%"
ECHO Out-File "%RptFile%" -Width 256                  >> "%TmpPSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%TmpPSScript%'"

:: -- Below will open file to view content with the default text editor
explorer.exe "%RptFile%"

EXIT

Родной PowerShell Explicit

В качестве бонуса я включил прямой синтаксис PowerShell, который вы можете использовать для просмотра результатов. Тест с и без без | FL и сравнить результаты.

schtasks /query /v /fo csv | ConvertFrom-CSV |
Select -Property "TaskName","Task To Run" |
Where {$_.TaskName -notcontains "TaskName"} | FL

Родной PowerShell Все

schtasks /query /v /fo csv | ConvertFrom-CSV |
Where {$_.TaskName -notcontains "TaskName"} | FL

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .