Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
powershell查询windows任务计划程序以查找将在特定日期时间之间运行的任务_Powershell_Scheduled Tasks_Scheduler_Taskscheduler - Fatal编程技术网

powershell查询windows任务计划程序以查找将在特定日期时间之间运行的任务

powershell查询windows任务计划程序以查找将在特定日期时间之间运行的任务,powershell,scheduled-tasks,scheduler,taskscheduler,Powershell,Scheduled Tasks,Scheduler,Taskscheduler,我继承了一台服务器,该服务器为数百个不同的进程运行windows计划任务(主要是启动自定义PowerShell脚本)-这些任务的计划可以是每15分钟一次,也可以是每年在特定日期一次 如何使用PowerShell(或其他任何方式)查询任务计划程序,以确定将来是否有任务在特定日期时间范围内运行?这是必要的,例如,我们可以在此服务器以及与之交互的其他服务器上安排和执行维护。以下是获取下一个运行作业的脚本 Get-ScheduledTask | Foreach-object { Get-Sched

我继承了一台服务器,该服务器为数百个不同的进程运行windows计划任务(主要是启动自定义PowerShell脚本)-这些任务的计划可以是每15分钟一次,也可以是每年在特定日期一次


如何使用PowerShell(或其他任何方式)查询任务计划程序,以确定将来是否有任务在特定日期时间范围内运行?这是必要的,例如,我们可以在此服务器以及与之交互的其他服务器上安排和执行维护。

以下是获取下一个运行作业的脚本

Get-ScheduledTask |
   Foreach-object { Get-ScheduledTaskInfo $_} |
   where-object {!($_.NextRunTime -eq $null)} |
   Select-object Taskname, NextRunTime |
   Sort-object -property NextRunTime

下面是获取下一个正在运行的作业的脚本

Get-ScheduledTask |
   Foreach-object { Get-ScheduledTaskInfo $_} |
   where-object {!($_.NextRunTime -eq $null)} |
   Select-object Taskname, NextRunTime |
   Sort-object -property NextRunTime

欢迎来到StackOverflow。我建议你阅读。你并不是在寻求帮助解决问题。你在问如何在一个新项目上取得突破。也就是说,因为这是一个社区,我将告诉你我对这个主题的一些了解,以及我对编写这样一个工具的最初想法

首先,我要提到这是一个看似复杂的话题。原因不多,包括但不限于:

  • 作为对象的计划任务可能非常复杂,具有广泛可变的计划、重复间隔、其他触发器类型和过多的其他配置点
  • 非GUI,即CLI、cmdlet和/或API工具多年来已发生变化。而且,将它们串在一起以解决第1点中提到的复杂性并不总是容易的
  • 警告:这份报告很难写。在开始这样的挑战之前,您应该寻找任何现有的工具,这些工具可能会对任务调度器进行清点或提供其他透明度

    此外,最好将维护窗口定义为策略问题。然后,您可以配置作业以避开窗口。乍一看,这比编写一个困难的程序来帮助挑选一个时间段要容易得多

    如果您选择继续前进,以下几个工具可能会有所帮助:

  • Schtasks.exe:一个功能惊人的CLI工具,已经存在很长时间了
  • TaskScheduler PowerShell模块:围绕调度COM对象编写的PowerShell模块。它最初是Windows7 PowerShell包的一部分,但现在您可以通过PowerShell库获得它。最简单的方法是使用典型的模块cmdlet,如
    Find module
    &
    Install module
  • 较新的ScheduledTasks模块默认安装在较新的Windows系统上。它是围绕Cim(WMI)编写的,默认情况下安装在更高版本的PowerShell/Windows中
  • 注意:后两种工具很容易混淆。不仅名称非常相似,而且它们包含的命令之间也有重叠和相似之处。例如,两个模块都有一个
    Get Scheduledtask
    cmdlet。处理混淆的两种方法:

  • 使用
    Import-Module
    cmdlet导入模块时,请使用
    -Prefix
    参数向cmdlet的“无”部分添加前缀。然后在此后调用cmdlet时使用该前缀
  • 使用限定名称调用cmdlet,如
    TaskScheduler\GetScheduledTasks
  • 现在获取调度数据。根据我的经验,所需的细节仅通过任务的XML定义公开。同样,您将遇到大量调度和/或触发器选项带来的复杂性。您可以阅读有关XML模式的内容

    以下是一些如何访问XML数据的示例:

    schtasks.exe /query /s pyexadm1 /tn <TaskName> /XML
    
    注:以上假设未使用前缀。因此,必须引用源模块,以避免与ScheduledTask模块混淆

    本例加载XML文本并在一行中将其转换为XmlDocument对象。然后,您可以访问有关任务的数据,如下所示:

    $TaskXML.Task.Triggers.CalendarTrigger
    
    $XMLTaskData = 
    TaskScheduler\Get-ScheduledTask -ComputerName <ComputerName> -Recurse | 
    ForEach-Object{ [XML]$_.XML }
    
    这可能会产生如下输出:

    StartBoundary       Enabled ScheduleByWeek
    -------------       ------- --------------
    2020-09-14T08:00:00 true    ScheduleByWeek
    
    通过利用管道,您可以大量运行此功能,管道可能如下所示:

    $TaskXML.Task.Triggers.CalendarTrigger
    
    $XMLTaskData = 
    TaskScheduler\Get-ScheduledTask -ComputerName <ComputerName> -Recurse | 
    ForEach-Object{ [XML]$_.XML }
    
    您可以像这样利用管道:

    $XMLTaskData = 
    Get-ScheduledTask -CimSession <ComputerName> | 
    Export-ScheduledTask | 
    ForEach-Object{ [XML]$_ }
    
    $XMLTaskData=
    获取ScheduledTask-CimSession|
    导出调度任务|
    ForEach对象{[XML]$\}
    
    与另一个管道示例一样,这将生成一个XML任务定义数组

    注意:在这种情况下,没有
    -Recurse
    参数。不过,您可以具体引用路径

    使用这些方法中的任何一种,您显然需要熟悉在PowerShell中使用XML对象,但是有大量的教程或其他相关资源

    同样,这里的复杂性在于处理许多触发器类型和调度范例。在获得最低可行计划(MVP)的过程中,您可能希望使用这些技术来清点现有任务。这可以帮助您确定开发过程的优先级


    最后一点;知道任务何时运行可能与知道任务何时运行完全不同。例如,一项任务可能运行在下午1:00,但作业的持续时间是可变的且不可计算。我觉得这很难对付。您可能需要另一个过程在事件日志中查找任务完成事件。您可能还需要考虑在XML数据中可以找到的执行时间限制。

    欢迎使用StAdvExcel。我建议你阅读。你并不是在寻求帮助解决问题。你在问如何在一个新项目上取得突破。也就是说,因为这是一个社区,我将告诉你我对这个主题的一些了解,以及我对编写这样一个工具的最初想法

    首先,我要提到这是一个看似复杂的话题。原因不多,包括但不限于:

  • 作为对象的计划任务可能非常复杂,具有广泛可变的计划、重复间隔、其他触发器类型和过多的其他配置点