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.