首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Task Scheduler -将历史信息放入脚本变量

Task Scheduler -将历史信息放入脚本变量
EN

Stack Overflow用户
提问于 2017-09-27 23:39:02
回答 1查看 9.3K关注 0票数 10

有没有办法将任务调度器历史记录信息放入批处理或PowerShell脚本中的数组或变量中。

例如,获取任务名称、任务开始时间(事件ID: 100 )、任务完成时间(事件ID: 102)等信息。这样我就可以用这些信息更新SQL数据库了。( sql表可能如下所示,我知道如何在获得信息后插入到数据库中)

代码语言:javascript
代码运行次数:0
运行
复制
TaskName    TaskStart              TaskCompleted
task1       27/09/2017 09:00:00    27/09/2017 10:00:00    
task2       27/09/2017 12:00:00    27/09/2017 16:00:00    
task1       04/10/2017 09:00:00    04/09/2017 09:55:00    

基本上,我不知道如何检索这些信息,如果可能的话。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-28 01:38:08

任务计划程序将记录到以下事件通道:

Microsoft-Windows-TaskScheduler/Operational

您可以使用Get-WinEvent来收集事件。首先,为id 100启动事件定义一个过滤器哈希表。

代码语言:javascript
代码运行次数:0
运行
复制
# Event filter for the initial query for all "Start" events in the last 24 hours
$EventFilter = @{
    LogName = 'Microsoft-Windows-TaskScheduler/Operational'
    Id = 100
    StartTime = [datetime]::Now.AddDays(-1)
}

我们需要从start事件中提取一些属性值,以便找到相关的完成事件,所以让我们创建一个属性选择器

代码语言:javascript
代码运行次数:0
运行
复制
# PropertySelector for the Correlation id (the InstanceId) and task name
[string[]]$PropertyQueries = @(
    'Event/EventData/Data[@Name="InstanceId"]'
    'Event/EventData/Data[@Name="TaskName"]'
)
$PropertySelector = New-Object System.Diagnostics.Eventing.Reader.EventLogPropertySelector @(,$PropertyQueries)

现在检索启动事件,找到对应的完成事件,并将信息作为新的自定义对象输出:

代码语言:javascript
代码运行次数:0
运行
复制
# Loop through the start events
$TaskInvocations = foreach($StartEvent in Get-WinEvent -FilterHashtable $EventFilter){
    # Grab the InstanceId and Task Name from the start event
    $InstanceId,$TaskName = $StartEvent.GetPropertyValues($PropertySelector)

    # Create custom object with the name and start event, query end event by InstanceId
    [pscustomobject]@{
        TaskName = $TaskName
        StartTime = $StartEvent.TimeCreated
        EndTime = $(Get-WinEvent -FilterXPath "*[System[(EventID=102)] and EventData[Data[@Name=""InstanceId""] and Data=""{$InstanceId}""]]" -LogName 'Microsoft-Windows-TaskScheduler/Operational' -ErrorAction SilentlyContinue).TimeCreated
    }
}

可以使用$TaskInvocations中的对象填充DataTable,也可以根据属性值生成插入查询

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46452001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档