You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell技术问题:追加票据创建日期到数组时日期重复

PowerShell中每个工单对应日期重复多次的问题原因及解决方法

你遇到的问题是在生成工单HTML行时,每个工单对应的日期会重复显示多次,比如:

INC0001 10/12/20 10/12/20 10/12/20 10/12/20 INC0002 10/12/20 10/12/20 10/12/20 10/12/20

而期望每个工单只显示自己的创建日期,我们先拆解问题的核心原因。

问题原因

你当前的代码逻辑里,提前把当前团队的所有工单的创建日期一次性取出来存到了$date变量中:

$date = $results |Where-Object TeamName -eq $team.TeamName |Select -ExpandProperty createdDate

这个$date实际上是一个数组(当该团队有多个工单时)。当你在字符串中直接使用$date时,PowerShell会自动将数组的所有元素用空格拼接成一个字符串,所以每个工单的<td>里就会显示该团队所有工单的日期,重复次数等于该团队的工单数量(你感觉和团队总数相关应该是巧合,比如刚好每个团队的工单数量等于团队总数)。

简单说:你没有给每个工单匹配对应的单个日期,而是把所有日期一股脑塞给了每个工单。

解决方案

我们需要调整逻辑,遍历每个工单记录时同时获取对应的TicketID和createdDate,而不是分开取ID列表和日期列表。

基础优化代码

$teamConfig = @(
    [pscustomobject]@{ TeamName = 'Team1'; TeamEmail = 'team1@domain.tld' }
    [pscustomobject]@{ TeamName = 'Team2'; TeamEmail = 'team2@domain.tld' }
)
$query = "select * from INCAutomation"
$results = Invoke-Sqlcmd -query $query -ServerInstance 'localhost' -Database 'AyushTest'

$teamTickets = foreach($team in $teamConfig) {
    $ticketIdArray = @()
    # 直接遍历当前团队的每一条工单记录,同时拿到ID和对应日期
    foreach ($ticket in $results | Where-Object TeamName -eq $team.TeamName) {
        $thisId = " <tr> <td>$($ticket.TicketID)</td> <td>$($ticket.createdDate)</td> </tr> "
        $ticketIdArray += $thisId
    }
    $team | Select TeamName,TeamEmail,@{Name='HTML';Expression={$ticketIdArray}}
}

$teamTickets.HTML

高效写法(推荐)

如果你工单数量较多,不推荐用数组累加(+=)的方式,因为每次累加都会创建新数组,效率较低。可以直接用ForEach-Object生成所有HTML行,再拼接成字符串:

$teamConfig = @(
    [pscustomobject]@{ TeamName = 'Team1'; TeamEmail = 'team1@domain.tld' }
    [pscustomobject]@{ TeamName = 'Team2'; TeamEmail = 'team2@domain.tld' }
)
$query = "select * from INCAutomation"
$results = Invoke-Sqlcmd -query $query -ServerInstance 'localhost' -Database 'AyushTest'

$teamTickets = foreach($team in $teamConfig) {
    # 直接生成所有HTML行并拼接成单个字符串
    $htmlContent = $results | 
        Where-Object TeamName -eq $team.TeamName | 
        ForEach-Object { " <tr> <td>$($_.TicketID)</td> <td>$($_.createdDate)</td> </tr> " } |
        Join-String -Separator ''
    $team | Select TeamName,TeamEmail,@{Name='HTML';Expression={$htmlContent}}
}

$teamTickets.HTML

这样修改后,每个工单就只会显示自己对应的创建日期,完全符合你的期望输出。

内容的提问来源于stack exchange,提问作者yush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:22:46