Como fazer SCHtASKS / Query exibir o atributo "múltiplas ações" no resultado da consulta?

2

Eu quero exibir todos os detalhes sobre uma determinada tarefa.

Por exemplo, eu tenho um "MyTask" que tem vários programas para executar como ações , mostrados abaixo: insira a descrição da imagem aqui

Eu quero ver a lista de programas que a tarefa é executada na versão de linha de comando do agendador de tarefas (ou: schtasks ).

Então, quando eu corro:

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

Mas eu só recebo a frase "múltiplas ações" ao invés das ações / programas atuais para serem executados como mostrado abaixo: insira a descrição da imagem aqui

Eu sei que eu poderia usar o /XMLargumento para mostrar a lista dos programas a serem executados, mas e se eu tiver muitas tarefas para gerar resultados? Eu quero que minha saída seja uma lista, ou seja/FO list

Como eu resolvo isso?

AK_
fonte

Respostas:

2

Lista de scripts em lote Todos os nomes e comandos de tarefas do Agendador de Tarefas

Eu forneci script em lote abaixo que será executado a partir do Windows 7 e Windows 10 .

Essencialmente, isso irá:

  1. Executar schtasks com o /XMLinterruptor e tubo de todo o XML conteúdo que ele lê através do findstr comando com o I switch (case insensitive) filtrando-a apenas para redirecionar as linhas que contêm o <!--e <command>cordas como ouput para um arquivo simples.
  2. O conteúdo do arquivo simples é executado por meio de um script dinâmico do PowerShell que substituirá as marcas XML por nomes de campo mais apropriadamente formatados, cortará qualquer espaço em branco inicial de todas as linhas, removerá toda a linha em branco e, por último, colocará uma nova linha antes de cada um dos Task Namecampos mas ele ignorará a primeira linha, já que não precisará ter uma linha antes dela - a linha mais alta do arquivo.

Nota: consulte a seção Gotchas abaixo para detalhes de anomalia em potencial e itens a serem observados.


O script em lote

@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%"

Resultados

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

Se você notar um Task Nameitem de campo sem nenhum Commanditem de campo abaixo dele, isso parece ser devido a tarefas agendadas do sistema, etc., que foram Actionslistadas como Custom Handlervalores que não podem ser editados, veja exemplos e captura de tela abaixo.

Exemplo (sem comandos)

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 

Configurações de Tarefa do Agendador de Tarefas (sem comandos / ações) insira a descrição da imagem aqui


Mais recursos

Suco de cafetão IT
fonte
a beleza disso está além das palavras :) obrigado!
AK_
Isso não está funcionando para mim quando os caminhos das ações têm espaços. Exemplo de saída: Task Name (and path): \PA wake up Command: "C:\Users\IT Command\Documents\Batch Codes\PA\PA.bat"eTask Name (and path): \Example One Command: C:\Users\IT
Mark Deven
Ele leu o texto após o espaço como um atributo
Mark Deven
É quando a ação não tem citações
Mark Deven
Isso funcionou muito obrigado. Eu fiz esta pergunta também, que se relaciona com o meu problema: superuser.com/questions/1363277/schtasks-exe-with-quotes
Mark Deven
1

Desde que você diz: " Eu ainda quero ver os nomes das tarefas em relação ao que suas ações são " no comentário, então você pode usar o exemplo de script em lotes abaixo para obter a saída esperada com o Windows 7 .

Essencialmente, isso irá:

  1. Execute o comando query schtasks detalhado para despejar a saída em um arquivo csv
  2. Com o comando nativa do Windows PowerShell convertfrom-csv , ele converterá a saída csv em uma lista como formato.
  3. De lá, ele usará o comando de seleção do PowerShell com a -propertyopção para obter apenas os valores dos campos que você deseja ver apenas.
  4. O PowerShell em que o comando com o -notcontains operador de comparação filtrará os TaskNameobjetos extras que, por qualquer motivo, copiam o arquivo csv com os comandos schtasks .

Nota: você é mais limitado com o que pode e não pode usar nativamente para essa tarefa com o Windows 7 do que com os sistemas operacionais Windows mais recentes, como o Windows 10 .

Script em lote explícito

Você pode precisar jogar com o -Width 256parâmetro e usar maior ou menor 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

Snippet de saída em lote

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    

Tudo em lote

@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 nativo explícito

Como bônus, incluí a sintaxe direta do PowerShell que você pode usar para ver os resultados. Teste com e sem sem | FLe compare os resultados.

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

PowerShell nativo tudo

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

Mais recursos

Suco de cafetão IT
fonte
que besta responda! Estou sem palavras. Obrigado! Eu ainda estou recebendo várias ações quando executo o PowerShell, estou assumindo que é porque estamos usando CSV como formato de saída. Você pode mudar isso para XML e ver se funciona?
AK_
Quando eu executo: schtasks /query /v /fo csv | ConvertFrom-CSV | Select -Property "TaskName","Task To Run" | Where {$_.TaskName -notcontains "TaskName"} | FLainda estou recebendo: o TaskName : \Microsoft\Windows\MyTask Task To Run : Multiple actionsque eu suponho é normal porque a lista de CSV não contém tanta informação quanto XML. O que eu estava pensando que pode ser a solução é implementar um analisador XML de 1-liner que liga cada "tarefa para executar" (mesmo se vários itens) para um "nome da tarefa" entendeu?
AK_
por favor faça - e obrigado novamente por tal resposta detalhada útil!
AK_
parece bom; assim que você tiver um POC em funcionamento; por favor adicione-o à resposta editando-o. obrigado muito!
AK_