PowerShell 5.1中如何合并两个计划任务查询结果生成统一表格
PowerShell 5.1 合并计划任务查询结果方法
完全可以实现,不需要安装额外模块,直接关联同一任务对象的两类属性即可完成合并,能避免分开查询后的数据错位问题。
实现逻辑
原两条命令的数据源本身是互相关联的:
Get-ScheduledTask返回的任务对象自带任务路径、名称、执行动作(Actions)等基础配置信息Get-ScheduledTaskInfo返回的是对应任务的运行时状态信息,二者可通过TaskPath+TaskName做唯一匹配
直接遍历筛选后的目标任务,同时拉取两类属性组装为自定义对象输出即可,不需要分两次查询再做结果拼接。
可用命令(多动作任务按动作拆分为多行)
该版本完全保留原命令的筛选规则:仅查询非禁用、根路径下、上次运行失败(LastTaskResult>1)的任务,若单个任务配置了多个执行动作,会每个动作对应一条输出记录:
Get-ScheduledTask | Where-Object { $_.State -ne "Disabled" -and $_.TaskPath -eq "\" } | ForEach-Object { $runtimeInfo = $_ | Get-ScheduledTaskInfo # 过滤上次运行成功的任务 if ($runtimeInfo.LastTaskResult -le 1) { return } # 遍历任务下所有配置的动作 foreach ($action in $_.Actions) { [PSCustomObject]@{ TaskPath = $_.TaskPath TaskName = $_.TaskName LastRunTime = $runtimeInfo.LastRunTime LastTaskResult = $runtimeInfo.LastTaskResult NextRunTime = $runtimeInfo.NextRunTime NumberofMissedRuns = $runtimeInfo.NumberofMissedRuns ExecutePath = $action.Execute ExecuteArguments = $action.Arguments } } } | Format-Table -AutoSize
可选调整版本(单任务单行显示)
如果需要每个任务仅输出一行,可将多个动作的执行路径、参数用分隔符合并到同一字段:
Get-ScheduledTask | Where-Object { $_.State -ne "Disabled" -and $_.TaskPath -eq "\" } | ForEach-Object { $runtimeInfo = $_ | Get-ScheduledTaskInfo if ($runtimeInfo.LastTaskResult -le 1) { return } [PSCustomObject]@{ TaskPath = $_.TaskPath TaskName = $_.TaskName LastRunTime = $runtimeInfo.LastRunTime LastTaskResult = $runtimeInfo.LastTaskResult NextRunTime = $runtimeInfo.NextRunTime NumberofMissedRuns = $runtimeInfo.NumberofMissedRuns AllExecutePaths = $_.Actions.Execute -join '; ' AllArguments = $_.Actions.Arguments -join '; ' } } | Format-Table -AutoSize
提示:如果需要导出结构化数据而非直接在控制台显示表格,把末尾的
Format-Table替换为Export-Csv -Path 自定义输出路径.csv -NoTypeInformation -Encoding UTF8即可。
内容的提问来源于stack exchange,提问作者user3732793
相关产品推荐
相关产品推荐

