PowerShell 入门:通过对象管道统计完成任务
用自定义对象描述任务,通过对象管道筛选与累计,理解属性访问、数组结果和格式化展示之间的边界。
本节目标
用自定义对象描述任务,通过对象管道筛选与累计,理解属性访问、数组结果和格式化展示之间的边界。
环境与运行方法
使用 PowerShell 7,保存为 lesson.ps1,执行 pwsh -NoProfile -File lesson.ps1。不修改系统配置,也不调用 Windows 专属管理接口。
核心思路
PowerShell 管道通常传递对象,后续命令可读取命名属性,而不必把显示文本拆回字段。先计算对象,再在最后格式化,可减少文本解析的不确定性。
完整示例
$tasks = @(
[pscustomobject]@{ Title = 'read'; Minutes = 20; Done = $true }
[pscustomobject]@{ Title = 'practice'; Minutes = 40; Done = $false }
[pscustomobject]@{ Title = 'review'; Minutes = 10; Done = $true }
)
$completed = @($tasks | Where-Object { $_.Done })
$total = ($completed | Measure-Object -Property Minutes -Sum).Sum
Write-Output ('completed={0} total={1}' -f $completed.Count, $total)
Write-Output ('original={0}' -f $tasks.Count)预期输出
completed=2 total=30
original=3逐步理解
$_ 是当前对象,筛选读取 Done 属性。@(...) 固定结果为数组,避免单结果形态给计数带来歧义。Measure-Object 按 Minutes 属性求和,最后用格式运算符输出。
Format-Table 属于展示阶段,不能把它当成仍然保留原始任务结构的业务管道。外部数据还应验证字段类型,不要因为界面看着像数值就直接用于统计。
常见问题与边界
- 对象管道不同于普通逐行文本管道。
- 单个结果与数组需要明确处理。
- 展示格式化应在计算之后。
动手练习
把全部 Done 改成 false。
参考答案
完成数组长度为零。面向用户时要明确空集合求和的展示规则,可显式变为零或显示暂无数据,不能凭默认输出猜测业务含义。
文章回复
0 条公开回复