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

3

Quando eu 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?

Oskar K.
fonte

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
Peter Hahndorf
fonte
3

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 lotes, 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 todos os itens relacionados à linha de cmd do Windows.
  • for / f - comando de loop em relação aos resultados de outro comando.
  • schtasks - Crie / edite uma tarefa / tarefa agendada. O trabalho pode ser criado no computador local ou remoto.
DavidPostill
fonte
Tentei isso. Funciona bem apenas para tarefas sem spacenome. Quando há espaços no nome da tarefa, isso não funciona. Ainda não tentei, mas pode funcionar se eu tentar ajustar tokensvalores contando espaços na saída.
Sandeep
@Sandeep Hmm. Complicado. Há alguns solução possível em do Windows números de contagem arquivo de lote de fichas - Stack Overflow
DavidPostill
Obrigado, isso funciona. Simplesmente ajuste o número de tokens se sua tarefa agendada tiver espaços, por exemplofor /f "usebackq skip=3 tokens=7" %a in (`schtasks.exe /query /tn "Refresh Dashboard Cache"`) do @echo %a
wp78de
2

Tente schtasks /querycom a /vopção para saída detalhada e /fo listpara o formato da lista. Em seguida, filtre os resultados com o findcomando

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

Você recebe uma string como esta

Status:         Running

Para extrair o valor do status, use o forcomando:

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

Se você estiver escrevendo um script do Powershell usando o Windows 7 e não puder usá- Get-ScheduledTasklo, 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
StephenSolace
fonte
0

Procurei uma boa resposta para isso e encontrei algumas coisas que me aproximaram. Acabei com 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ê deseja 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

Em seguida, você pode selecionar a propriedade com a qual deseja trabalhar ...

$task.Status
$task."Last Result"

Lembre-se de usar aspas nas propriedades com espaços nelas!

Para esclarecer, minha resposta está usando o Powershell quando Get-ScheduledTask não está disponível, o que não seria se estivesse executando o Windows 7 ou o Windows Server 2008. Embora uma resposta forneça uma maneira de obter o status, acho que 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 precisar analisar em qual coluna a propriedade está. Em suma, minha resposta é a solução que eu estava procurando, então pensei em compartilhá-la. para outros indivíduos afins.

Robert Yarbrough
fonte
(1) Este é o PowerShell, certo? Quando a pergunta (e muitas das respostas) se referem ao CMD, é bom mencionar explicitamente que sua resposta usa o PowerShell. (2) Já existem algumas respostas do PowerShell; um que usa Get-ScheduledTaske outro que usa (schtasks /query …) -split. Como sua resposta é melhor do que essas? Por favor, não responda nos comentários; edite  sua resposta para torná-la mais clara e completa.
Scott Scott
0

O seguinte também funciona para nomes de tarefas com espaço (s) em seu nome:

for /f "tokens=3 delims=," %a in ('schtasks.exe /query /tn "GoogleUpdateTaskMachineUA" /fo csv /nh') do echo %~a

À medida que um arquivo CSV de saída ( c omma s eparated v alores) ( /foRMAT csv) e uso delims=,, os espaços não importa mais. /nhsignifica " n o h eader", por isso não há necessidade de skip=.

Stephan
fonte
-1

Adicione /fo csvao schtaskscomando para alterar seu formato de saída para CSV.

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

schtasks.exe /query /tn "GoogleUpdateTaskMachineUA" | csvfix order -ifn -f 3
techraf
fonte