Como posso recuperar o status de uma tarefa agendada usando schtasks?

2

Quando executo isso:

schtasks.exe /query  /tn "GoogleUpdateTaskMachineUA"

Eu entendo isso:

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
GoogleUpdateTaskMachineUA                N/A                    Disabled

Existe alguma maneira de recuperar apenas o status?

    
por Oskar K. 03.02.2016 / 07:09

6 respostas

4

A menos que você realmente precise usar schtasks.exe , use o PowerShell com todas as suas opções superiores de saída e formatação:

Get-ScheduledTask | ? TaskName -eq GoogleUpdateTaskMachineUA | Select State | ft -AutoSize

ou

(Get-ScheduledTask | Where TaskName -eq GoogleUpdateTaskMachineUA ).State
    
por 03.02.2016 / 11:49
2

Existe alguma maneira de recuperar apenas o status?

Use o seguinte comando:

for /f "usebackq skip=3 tokens=4" %a in ('schtasks.exe /query /tn "GoogleUpdateTaskMachineUA"') do @echo %a

Notas:

  • skip=3 - ignora as linhas de cabeçalho
  • tokens=4 - pegue o quarto token (o valor na coluna de status)
  • Para usar em um arquivo de lote, substitua %a por %%a

Exemplo de uso:

F:\test>schtasks.exe /query  /tn "GoogleUpdateTaskMachineUA"

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
GoogleUpdateTaskMachineUA                03/02/2016 12:17:00    Ready

F:\test>for /f "usebackq skip=3 tokens=4" %a in ('schtasks.exe /query /tn "GoogleUpdateTaskMachineUA"') do @echo %a
Ready

Leitura Adicional

por 03.02.2016 / 13:09
2

Experimente schtasks /query com /v para saída detalhada e /fo list para formato de lista. Em seguida, filtre os resultados com o comando find .

schtasks /query /tn "GoogleUpdateTaskMachineUA" /v /fo list | find "Status:"

Você recebe uma string como essa

Status:         Running

Para extrair valor do status, use o comando for :

for /f "delims=: tokens=2" %a in ('schtasks /query /tn "GoogleUpdateTaskMachineUA" /v /fo list ^| find "Status:"') do @echo %a
  • Para usar no arquivo de lote, substitua %a por %%a
  • Para escapar de símbolos como | ou > in for , use ^
por 06.07.2018 / 13:29
0

Se você estiver escrevendo um script Powershell usando o Windows 7 e não puder usar Get-ScheduledTask , considere usar:

$status = ((schtasks /query /S 'yourServer' /TN yourTask)[4] -split ' +')[2]

Parece assim:

### Running this:
schtasks /query /S 'yourServer' /TN yourTask
### Leads to the output below.

Folder: \
TaskName                                 Next Run Time          Status         
======================================== ====================== ===============
yourTask                                 N/A                    Running   

### Running this:
$status = ((schtasks /query /S 'yourServer' /TN yourTask)[4] -split ' +')[2]
Write-Host "$($status)"
### Leads to the output below

Running
    
por 25.10.2017 / 18:28
0

Eu procurei uma boa resposta para isso e encontrei algumas coisas que me aproximaram. O que acabei fazendo é o seguinte.

$taskName="SomeTask"
$serverName="yourserver"
$status = (schtasks.exe /query /tn "$taskName" /s $serverName /v /fo CSV | ConvertFrom-Csv | Select-Object -Property "Status").Status

Se você quiser todos os itens da tarefa, pode fazer algo semelhante ao seguinte ...

$task= schtasks.exe /query /tn "$taskName" /s $serverName  /v /fo CSV | ConvertFrom-Csv | Select-Object

Depois, você pode selecionar qualquer propriedade com a qual queira trabalhar ...

$task.Status
$task."Last Result"

Lembre-se de usar aspas em torno das propriedades com espaços nelas!

Para esclarecer, minha resposta é usar o Powershell quando o Get-ScheduledTask não estiver disponível, o que não aconteceria se eu estivesse executando o Windows 7 ou o Windows Server 2008. Embora uma resposta forneça uma maneira de obter o status, sinto Esse método é mais fácil de entender e trabalhar. Ainda mais se alguém estiver interessado em obter outras propriedades da tarefa agendada sem ter que analisar em qual coluna a propriedade está. Em suma, minha resposta é a solução que eu estava procurando, então eu pensei em compartilhá-lo para outros indivíduos que pensam.

    
por 28.09.2018 / 18:03
-1

Adicione /fo csv ao comando schtasks para alterar seu formato de saída para CSV.

Em seguida, use CSVFix para filtrar a coluna necessária com o argumento -f 3 e pule o registro do nome do campo com -ifn .

schtasks.exe /query /tn "GoogleUpdateTaskMachineUA" | csvfix order -ifn -f 3
    
por 03.02.2016 / 08:07