如何用PowerShell获取每月计划任务的运行月份与日期?
获取计划任务的每月触发器详细信息
要提取每月计划任务的运行月份选择和具体日期,关键是访问触发器对象的MonthlySettings属性——该属性仅对Monthly类型的触发器有效,下面是具体的PowerShell操作方案:
核心代码示例
Get-ScheduledTask | Where-Object { $_.Triggers -ne $null } | ForEach-Object { $task = $_ foreach ($trigger in $task.Triggers) { # 仅处理每月触发器 if ($trigger.Type -eq 'Monthly') { [PSCustomObject]@{ TaskName = $task.TaskName TaskPath = $task.TaskPath # 选中的月份(数组形式,1=1月,12=12月) SelectedMonths = $trigger.MonthlySettings.MonthsOfYear # 运行日期:区分固定日期/每月最后一天 RunDate = if ($trigger.MonthlySettings.Day -ne 0) { $trigger.MonthlySettings.Day } else { "每月最后一天" } # 特殊规则:每月第N个星期X的情况(比如每月第2个周五) RunWeeklyPattern = if ($trigger.MonthlySettings.WeeksOfMonth -ne 0) { "第$($trigger.MonthlySettings.WeeksOfMonth)个$(([DayOfWeek]$trigger.MonthlySettings.DaysOfWeek))" } else { $null } } } } }
属性说明
MonthsOfYear:返回整数数组,对应选中的月份(1代表1月,2代表2月…12代表12月),选中所有月份时会包含1-12的全部值。Day:任务设置为固定日期运行时返回具体日期(如15代表每月15日);设置为每月最后一天时,该值为0。WeeksOfMonth+DaysOfWeek:任务设置为每月第N个星期X(如每月第3个周一)时,WeeksOfMonth返回1-5的数字(1=第一个,5=第五个),DaysOfWeek返回星期枚举值(0=周日,1=周一…6=周六),可通过[DayOfWeek]转换为可读名称。
补充:整合已有信息
如果要将每月触发器信息和你已获取的任务名称、执行文件等数据合并,可使用以下代码:
Get-ScheduledTask | Where-Object { $_.Triggers -ne $null } | ForEach-Object { $task = $_ foreach ($trigger in $task.Triggers) { $output = [PSCustomObject]@{ TaskName = $task.TaskName TaskPath = $task.TaskPath ExecuteFile = $task.Action.Execute Arguments = $task.Action.Arguments TriggerType = $trigger.Type SelectedMonths = $null RunDate = $null RunWeeklyPattern = $null } if ($trigger.Type -eq 'Monthly') { $output.SelectedMonths = $trigger.MonthlySettings.MonthsOfYear $output.RunDate = if ($trigger.MonthlySettings.Day -ne 0) { $trigger.MonthlySettings.Day } else { "每月最后一天" } $output.RunWeeklyPattern = if ($trigger.MonthlySettings.WeeksOfMonth -ne 0) { "第$($trigger.MonthlySettings.WeeksOfMonth)个$(([DayOfWeek]$trigger.MonthlySettings.DaysOfWeek))" } else { $null } } # 仅输出每月任务的结果 if ($output.TriggerType -eq 'Monthly') { $output } } }
内容的提问来源于stack exchange,提问作者user3398681
相关产品推荐
相关产品推荐

