如何在PowerShell中计算工单Referred Date与Resolved Date的时间差并输出
计算工单Referred Date与Resolved Date的时间差并添加输出列
嗨,我看了你的现有脚本,要实现这个时间差计算并单独列显示,其实用PowerShell的计算属性就能轻松搞定,不用额外折腾自定义函数。直接在Select-Object里加个自定义列就行,修改后的完整脚本如下:
$users = Get-Content -Path C:\Temp\users.txt foreach ($user in $users) { $filterDate = [DateTime]::Today.AddDays(-1) Get-CdPacPro -ResolvedByGroup MyGroup -ResolvedByELID $user | Where-Object {$_.ResolvedDate.Date -ge $filterDate} | Select-Object ProblemID,ClosedByELID,ClosedByGroup,ResolvedDate,ReferredDate, @{ # 定义输出列的名称,可按需修改 Name = "ResolutionTimeSpan" # 核心计算逻辑:直接用两个日期相减得到时间差 Expression = { $_.ResolvedDate - $_.ReferredDate } } }
核心逻辑说明:
- 新增的
@{Name=...; Expression=...}就是PowerShell的计算属性:Name:设置输出列的标题,这里我用了ResolutionTimeSpan,你可以改成更贴合业务的名字,比如处理时长。Expression:写时间差的计算逻辑——PowerShell中两个DateTime对象直接相减会返回TimeSpan类型,自动显示为天.时:分:秒或时:分:秒的格式,完全满足时间差的展示需求。
可选优化:自定义时间差显示格式
如果觉得默认的TimeSpan格式不够直观,想改成类似X天Y小时Z分钟的字符串,可以把计算属性改成这样:
@{ Name = "ResolutionDuration" Expression = { $timeDiff = $_.ResolvedDate - $_.ReferredDate # 拼接成友好的字符串格式 "$($timeDiff.Days)天 $($timeDiff.Hours)小时 $($timeDiff.Minutes)分钟" } }
这样输出的ResolutionDuration列就会是更易读的文本格式,方便快速浏览。
内容的提问来源于stack exchange,提问作者Oxycash
相关产品推荐
相关产品推荐

