如何在PowerShell脚本中统计任务得分与失败任务数量?
实现PowerShell任务执行结果统计
方法一:修改任务函数返回结构化对象(推荐)
这种方式让任务函数输出包含状态和分数的自定义对象,后续统计更可靠,避免字符串解析的潜在错误:
Function Task_1 { Process { [PSCustomObject]@{ Status = 'Failed' Points = 0 } } } Function Task_2 { Process { [PSCustomObject]@{ Status = 'Passed' Points = 12 } } } Function Task_3 { Process { [PSCustomObject]@{ Status = 'Passed' Points = 34 } } } Function Task_4 { Process { [PSCustomObject]@{ Status = 'Failed' Points = 0 } } } # 收集所有任务执行结果 $taskResults = @(Task_1, Task_2, Task_3, Task_4) # 统计失败任务数量 $failedCount = ($taskResults | Where-Object Status -eq 'Failed').Count # 计算通过任务的总得分 $totalPoints = ($taskResults | Where-Object Status -eq 'Passed').Points | Measure-Object -Sum | Select-Object -ExpandProperty Sum # 输出统计结果 Write-Host "失败任务数量: $failedCount" Write-Host "通过任务总得分: $totalPoints"
方法二:解析原有函数的字符串输出(无需修改原函数)
如果不想改动现有任务函数,可以捕获它们的输出字符串,通过正则表达式解析状态和分数:
Function Task_1 { Process { Write-Output "Task has failed - Points awarded:0" } } Function Task_2 { Process { Write-Output "Task has passed - Points awarded:12" } } Function Task_3 { Process { Write-Output "Task has passed - Points awarded:34" } } Function Task_4 { Process { Write-Output "Task has failed - Points awarded:0" } } # 收集所有任务的输出内容 $taskOutputs = @(Task_1, Task_2, Task_3, Task_4) # 初始化统计变量 $failedCount = 0 $totalPoints = 0 # 遍历输出内容进行解析统计 foreach ($output in $taskOutputs) { if ($output -match 'Task has failed') { $failedCount++ } # 匹配分数数值 if ($output -match 'Points awarded:(\d+)') { $totalPoints += [int]$matches[1] } } # 输出统计结果 Write-Host "失败任务数量: $failedCount" Write-Host "通过任务总得分: $totalPoints"
运行结果
两种方法执行后都会输出:
失败任务数量: 2
通过任务总得分: 46
内容的提问来源于stack exchange,提问作者I-1
相关产品推荐
相关产品推荐

