如何让 SCHTASKS /Query 在查询结果中显示“多项操作”属性?

如何让 SCHTASKS /Query 在查询结果中显示“多项操作”属性?

我想显示有关某项特定任务的所有详细信息。

例如,我有一个“MyTask”,其中有多个程序要运行行动,如下所示: 在此处输入图片描述

我想查看任务计划程序的命令行版本中运行的任务程序列表(或:调度任务)。

所以当我跑步时:

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

但我只得到了短语“多个操作”,而不是要运行的实际操作/程序,如下所示: 在此处输入图片描述

我知道我可以使用/XML参数来显示要运行的程序列表,但如果我有许多任务需要生成结果怎么办?我希望我的输出是一个列表,即/FO list

我该如何解决这个问题?

答案1

批处理脚本列出所有任务计划程序作业名称和命令

我提供了以下批处理脚本,它将从Windows 7的Windows 10

本质上这将:

  1. 跑步调度任务/XML开关和管道XML它读取的内容 查找字符串命令与开关(不区分大小写)进行过滤,仅将包含和字符串I 的行重定向为输出到平面文件。<!--<command>
  2. 然后,平面文件内容通过动态电源外壳脚本将取代XML标签具有更适当格式的字段名称,修剪所有行中的前导空格,删除所有空白行,最后在每个字段前放置一个新行, Task Name但它会跳过第一行,因为它不需要在它之前有一行 - 文件中的最上面一行。

笔记:查看陷阱下面的部分了解潜在的异常细节和注意事项。


批处理脚本

@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

陷阱

如果您注意到某个Task Name字段项下方没有Command字段项,这似乎是由于系统计划任务等列出ActionsCustom 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 

任务计划程序作业设置(没有命令/动作) 在此处输入图片描述


更多资源

答案2

既然你说:“我仍然希望看到与其操作相关的任务名称然后您可以使用下面的示例批处理脚本来获得预期的输出Windows 7的

本质上这将:

  1. 运行详细调度任务查询命令将输出转储到 csv 文件
  2. 使用 Windows 本机 PowerShell 转换自-csv命令,它会将 csv 输出转换为列表格式。
  3. 从那里它将使用 PowerShell 选择使用 -property开关命令来仅获取您想要查看的字段的值。
  4. PowerShell在哪里 命令-notcontains 比较运算符将过滤掉TaskName由于某种原因转储到 csv 文件中的多余对象,并使用调度任务 命令。

注意:对于这项任务,你可以使用和不能使用的内容有更多限制Windows 7的比使用较新的 Windows 操作系统(如Windows 10

批处理脚本显式

您可能需要使用该-Width 256参数并使用更大或更小的整数。

@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

更多资源

相关内容