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

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

Quando executo isso:

schtasks.exe /query  /tn "GoogleUpdateTaskMachineUA"

Eu entendi isso:

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

Existe alguma maneira de recuperar apenas o status?

Responder1

Tente schtasks /querycom /vopção para saída detalhada e /fo listformato de lista. Em seguida, filtre os resultados com findo comando.

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

Você recebe uma corda assim

Status:         Running

Para extrair o valor do status, use foro comando:

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

Responder2

A menos que você realmente precise usar o 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

Responder3

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- ignore as linhas do cabeçalho
  • tokens=4- pegue o 4º token (o valor na coluna de status)
  • Para usar em um arquivo em lote, substitua %apor%%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

  • Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
  • para /f- Comando de loop em relação aos resultados de outro comando.
  • tarefas- Criar/editar um trabalho/tarefa agendada. O trabalho pode ser criado no computador local ou remoto.

Responder4

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

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

Se parece com isso:

### 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

informação relacionada