Como imprimir informações sobre o Agendador de Tarefas no script powershell?

7

Estou tentando imprimir informações do Task Scheduler do computador local em um script PowerShell para que outros usuários também possam imprimir essas informações e não tenham que acessar o Task Scheduler . Eu preciso do script para imprimir

  • nome,
  • status,
  • gatilhos,
  • próximo tempo de execução,
  • último tempo de execução,
  • resultado da última execução,
  • autor,
  • criado.

Eu posso imprimir as informações sobre o nome, o próximo tempo de execução e o último tempo de execução, mas o restante não será impresso quando eu executar o script.

Já iniciei meu roteiro e abaixei os campos.

$schedule = new-object -com("Schedule.Service") 
$schedule.connect() 
$tasks = $schedule.getfolder("\").gettasks(0)

$tasks | select Name,Status,Triggers,NextRunTime,LastRunTime,LastRunResult,Author,Created | ft

foreach ($t in $tasks)
{
foreach ($a in $t.Actions)
{
$a.Path
}
}

Qualquer ajuda ou sugestão seria apreciada.

Abaixo está uma captura de tela com o que estou procurando e quais campos não imprimem dados:

    
por user38725 12.06.2014 / 17:06

2 respostas

4

Isso pode ser limpo um pouco (ou seja, mapear códigos LastRunResult). Deixe-me saber se você precisar de ajuda. Os gatilhos são um pouco mais difíceis, pois não acho que a representação em inglês simples que você vê ao visualizar uma tarefa na GUI exista no objeto COM. Eu acredito que teria que ser construído a partir do TriggerCollection armazenado em RegisteredTask.Definition.Triggers

$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$out = @()
$sched.GetFolder("\").GetTasks(0) | % {
    $xml = [xml]$_.xml
    $out += New-Object psobject -Property @{
        "Name" = $_.Name
        "Status" = switch($_.State) {0 {"Unknown"} 1 {"Disabled"} 2 {"Queued"} 3 {"Ready"} 4 {"Running"}}
        "NextRunTime" = $_.NextRunTime
        "LastRunTime" = $_.LastRunTime
        "LastRunResult" = $_.LastTaskResult
        "Author" = $xml.Task.Principals.Principal.UserId
        "Created" = $xml.Task.RegistrationInfo.Date
    }
}

$out | fl Name,Status,NextRuNTime,LastRunTime,LastRunResult,Author,Created
    
por 12.06.2014 / 18:59
5

O Server 2012 R2 e o Windows 8.1 têm cmdlets do Agendador de Tarefas e esse módulo pode ser copiado e usado em uma máquina com Windows 7, provavelmente ele também precisa do .NET mais recente e do Windows Management Framework. Eu sou capaz de desativar e reabilitar as tarefas agendadas, bem como exibir informações da tarefa. Atualmente, não conheço os cmdlets internos que me fornecem essas informações ou permitem esse controle.

Para listar todas as tarefas agendadas na máquina:

Get-ScheduledTask

Você pode obter os seguintes membros do objeto de sequência de tarefas:

PS C:\BigHomie> $A = Get-ScheduledTask | select -First 1

PS C:\BigHomie> $A

       TypeName: Microsoft.Management.Infrastructure.CimInstance#Root/Microsoft/Windows/TaskScheduler/MSFT_ScheduledTask

Name                      MemberType     Definition
----                      ----------     ----------
Clone                     Method         System.Object ICloneable.Clone()
Dispose                   Method         void Dispose(), void IDisposable.Dispose()
Equals                    Method         bool Equals(System.Object obj)
GetCimSessionComputerName Method         string GetCimSessionComputerName()
GetCimSessionInstanceId   Method         guid GetCimSessionInstanceId()
GetHashCode               Method         int GetHashCode()
GetObjectData             Method         void GetObjectData(System.Runtime.Serialization.SerializationInfo info, Sys...
GetType                   Method         type GetType()
ToString                  Method         string ToString()
Actions                   Property       CimInstance#InstanceArray Actions {get;set;}
Author                    Property       string Author {get;set;}
Date                      Property       string Date {get;set;}
Description               Property       string Description {get;set;}
Documentation             Property       string Documentation {get;set;}
Principal                 Property       CimInstance#Instance Principal {get;set;}
PSComputerName            Property       string PSComputerName {get;}
SecurityDescriptor        Property       string SecurityDescriptor {get;set;}
Settings                  Property       CimInstance#Instance Settings {get;set;}
Source                    Property       string Source {get;set;}
TaskName                  Property       string TaskName {get;}
TaskPath                  Property       string TaskPath {get;}
Triggers                  Property       CimInstance#InstanceArray Triggers {get;set;}
URI                       Property       string URI {get;}
Version                   Property       string Version {get;set;}
State                     ScriptProperty System.Object State {get=[Microsoft.PowerShell.Cmdletization.GeneratedTypes...


PS C:\BigHomie> $A.Triggers


Enabled            : True
EndBoundary        :
ExecutionTimeLimit :
Id                 :
Repetition         : MSFT_TaskRepetitionPattern
StartBoundary      :
PSComputerName     :
    
por 12.06.2014 / 17:44