Relatório de tarefas agendadas do Windows?

2

Temos cerca de 12 a 14 servidores Win200 [3,8] on-line por vez (algumas VMs são transitórias). A maioria deles executa algumas tarefas agendadas. Como posso obter uma lista de todas as tarefas agendadas em execução em cada servidor e, mais importante, o usuário do domínio em que estão executando? Nós poderíamos logar em cada servidor e perguntar, mas estou querendo saber se há algum powershell ou outro sistema para fazer isso (ou algo no Active Directory?)

Um bom para ter permitir que isso seja executado em nossos desktops Windows XP, também ... Não é um requisito, mas mais de um FYI. Obrigado!

    
por Matt Rogish 01.05.2009 / 22:02

2 respostas

3

Schtasks é seu amigo para isso - AT é antigo e não (SFAIK) compreende tarefas criadas com schtasks. Infelizmente, o objeto WMI Win32_ScheduledTask é baseado em AT, caso contrário, seria perfeito para isso.

Infelizmente, nem o AT nem o schtasks relatam ao usuário que o job é executado como. Há provavelmente um objeto COM em algum lugar que permite que você chegue a isso; talvez você poderia perguntar no stackoverflow?

Se você quiser fazer um script, provavelmente faria algo assim:

$servers = 'server1','server2','server3'
$allTasks = @()
$servers | %{ 
    $data = schtasks /query /S $_ /fo list
    # Data looks like this:
    # <blank line> 
    # HostName:      [SERVER]
    # TaskName:      [TASK NAME]
    # Next Run Time: 12:00:00 PM, 5/9/2009
    # Status:        [BLANK or SOME ERROR]
    foreach ($line in $data){
        $blob=""|select Host, Task, Next, Status
        [void]$foreach.MoveNext(); $l = $foreach.Current.length;
        $blob.Host = $foreach.current.substring(15, $l-15)
        [void]$foreach.MoveNext(); $l = $foreach.Current.length;
        $blob.Task = $foreach.current.substring(15, $l-15)
        [void]$foreach.MoveNext(); $l = $foreach.Current.length;
        $blob.Next = $foreach.current.substring(15, $l-15)
        [void]$foreach.MoveNext(); $l = $foreach.Current.length;
        $blob.Status = $foreach.current.substring(15, $l-15)
        $allTasks += $blob
    }
}
$allTasks|format-table

Isso se tornou um ensaio de código maléfico - seria mais fácil usar a opção / FO csv para despejar em um arquivo de texto o uso de importação-csv para recuperar os dados no PS, mas dessa forma você perderia o nome do servidor. Então, em vez disso, você pode se mostrar um pouco e fazer a criação de objetos personalizados e hacking com o enumerador foreach. Chamar MoveNext move você para o próximo item na lista, então você pula a primeira linha vazia de saída e pega cada uma das próximas 4 linhas e as transforma em algo útil.

    
por 08.05.2009 / 19:49
2

O Agendador de Tarefas integrado deve suportar a conexão a um computador remoto (como a maioria das ferramentas do Windows) e gerenciar as tarefas do computador remoto (na verdade, não tentei no XP, mas A Microsoft parece dizer que deveria ).

O comando , que lida e presumivelmente lista as tarefas agendadas, também pode receber um computador remoto para se conectar. Como é um comando de console, seria fácil roteirá-lo para se conectar a uma lista de computadores e exibir todas as tarefas. Em teoria, de qualquer maneira ^^

    
por 01.05.2009 / 22:20