Consultar schtasks usando o Powershell

8

Em uma máquina Windows7, estou tentando executar uma consulta para visualizar todas as tarefas agendadas usando schtasks.exe

Isso é bom, mas eu também gostaria de filtrar o conjunto de resultados usando algo como

schtasks /query | where { $_.TaskName -eq "myTask" } 

O problema é que eu não faço isso schtasks retorna uma lista formatada corretamente para a função where funcionar.

Eu também tentei:

schtasks /query /FO LIST
schtasks /query | format-list | where ....

aqueles também não funcionam.

Qual seria a melhor maneira de consultar as schtasks em um computador local usando o Win7 e poder filtrá-las

jdiaz
fonte
O que há com as barras invertidas lá? Tenho certeza de que não é o que schtasksespera por lá, mas sim uma barra.
Joey
ha! você está certo. Eu o corrigi acima
jdiaz

Respostas:

8

Você pode tentar usar schtasks, o que o deixará analisar o texto. Isso quase sempre é propenso a erros e, definitivamente, mais difícil do que obter a saída de um comando.

Acontece que existe um módulo TaskScheduler no PowerShellPack . Depois de instalar o pacote do PowerShell, para obter todas as tarefas agendadas, use:

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

Como esses são objetos reais, para encontrar uma tarefa com um nome específico, você pode usar:

Get-ScheduledTask -Recurse |  Where-Object { $_.Name -like "*Task*"}

Em geral, você descobrirá que a comunidade do PowerShell tornou muito mais difícil o uso de linhas de comando, como schtasks, e as transformou em cmdlets fáceis de usar, como Get-ScheduledTask.

Veja também:

Enviando emails automatizados usando o módulo TaskScheduler

Espero que isto ajude

Automação de partida
fonte
1
Isso funciona muito bem se você estiver usando caixas Win2k8 (ou vista / W7). Infelizmente, ele não funciona com servidores W2k3 (que ainda são muito comuns no meu ambiente).
Mike Shepard
@ MikeShepard Se você quiser os novos brinquedos, precisará parar de usar os sistemas operacionais de 11 anos.
Ryan Ries
1
Essa é a história da minha carreira. :-(
Mike Shepard
2

se você não precisar fazer isso no PowerShell, o seguinte funcionará

schtasks / query | findstr / i "mytask"

versão ps
schtasks / query | ? {$ _ -como 'mytask'}

Tony Roth
fonte
algum exemplo de código fonte completo para criar, consultar e excluir tarefas usando o PS?
Kiquenet 10/09/12
2

Aqui está um post que escrevi sobre isso. Essencialmente, peguei a saída do / FO LIST / V, escrevi isso em um arquivo e importei-o novamente como objetos usando import-csv

Mike Shepard
fonte
2
Você está no caminho certo, mas escrevendo para um arquivo temporário é desnecessário aqui: schtasks /query /fo csv /v|convertfrom-csvfunciona muito bem
Joey
este é puro, mas ainda não é facilmente consultáveis
jdiaz
Johannes: você está certo, mas eu realmente (realmente) não gosto de propriedades que incorporam espaços / dois pontos / barras. jdiaz: O que não é consultável? O script que eu publiquei e a revisão de Johannes retornam objetos nativos do PowerShell com propriedades. Eles devem ser tão consultáveis ​​quanto qualquer outra entidade do PowerShell.
Mike Shepard
1
Verdadeiramente - eles podem ser consultados ... schtasks /query /fo csv /v /s "myserver" | convertfrom-csv | Select TaskName, "Last Run Time", Author | ? {$_.Author -notmatch "microsoft|N/A|Author"}fornecerão todas as tarefas agendadas personalizadas que você tiver.
SliverNinja - MSFT
2

Você pode tentar:

schtasks /query /FO CSV | ConvertFrom-CSV | Where { $_.TaskName -eq "myTask" } 

O truque consiste em converter a saída em CSV primeiro e depois voltar a um objeto do PowerShell.

Alex
fonte
0

Você está pensando demais.

Linha de comando para o que você deseja schtasks / query / s% nomedocomputador% | FIND / I "% name_of_task%"

exemplo schtasks / query / s server01 | FIND / I "agendamento"


fonte
-2

As melhores opções são do Alex, porque você não precisa de biblioteca e converterá as respostas da string de schtasks no objeto Powershell.

Juan Andres Ramirez
fonte