Вопрос: Как заставить SCHTASKS / Query отобразить атрибут «несколько действий» в результате запроса?


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

Например, у меня есть «MyTask», в котором есть несколько программ для запуска действия, показано ниже: enter image description here

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

Поэтому, когда я запускаю:

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

Но я получаю только выражение «несколько действий» вместо фактических действий / программы, которые будут выполняться, как показано ниже: enter image description here

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

Как я могу это решить?


1
2018-03-08 20:06


Источник




Ответы:


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

Я предоставил пакетный скрипт ниже, который будет запускаться из 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 

Настройки задания планировщика заданий (те, у которых нет команд / действий) enter image description here


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


1
2018-03-11 03:51



красота этого не зависит от слов :) спасибо! - AK_


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

По существу это будет: 

  1. Запустите подробный Schtasks запрос   команда для вывода вывода в файл csv
  2. С родным PowerShell Windows    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 Явный

В качестве бонуса я включил прямой синтаксис 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

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


1
2018-03-09 00:37



что зверь ответит! У меня нет слов. Спасибо! Я все еще получаю несколько действий при запуске powershell, я предполагаю, что это потому, что мы используем CSV в качестве выходного формата. Можете ли вы изменить это в XML и посмотреть, работает ли он? - AK_
Когда я запускаю: schtasks /query /v /fo csv | ConvertFrom-CSV | Select -Property "TaskName","Task To Run" | Where {$_.TaskName -notcontains "TaskName"} | FL Я все еще получаю: TaskName : \Microsoft\Windows\MyTask Task To Run : Multiple actions который, я полагаю, является нормальным, потому что список CSV не содержит столько информации, сколько XML. То, о чем я думал, может быть решением, заключается в реализации парсера XML с 1 строкой, который связывает каждую «задачу для запуска» (даже если несколько элементов) с «именем задачи»? - AK_
сделайте - и еще раз спасибо за такой полезный подробный ответ! - AK_
звучит хорошо; как только у вас будет рабочая комиссия; добавьте его в ответ, отредактировав его. большое спасибо! - AK_