在foreach中拆分数组

时间:2019-02-10 01:36:14

标签: arrays powershell foreach

我正在使用Exchange邮件跟踪功能从数组中拆分收件人,以便它们出现在自己的行上。

当我运行以下命令时:

foreach ($recepient in $recepients){
    $recepient.Recipients
}

收件人显示为列表。

但是,当我将变量添加为表达式时,输出显示收件人仍在数组中。

也尝试使用:

Split-Array -inArray $user -Size 1

没有太大进展。

输出未拆分收件人数组。示例:

Timestamp           recipients       Messagesubject      eventID
---------           ----------       ----------------    -------
01/01/2019 10:11:00 {User1,User2}    Subject             Deliver
$Report = @()

$Sender = "sender@email.com"
$recepients = Get-MessageTrackingLog -EventId "Deliver" -Sender $Sender -Start (Get-Date).AddDays(-8) -MessageSubject "Subject"

foreach ($recepient in $recepients) {
    $user = $recepient.Recipients

    $Data = $recepient | select timestamp,@{L=”recepients”;E={$user}},eventid

    $report += $Data
}
$Report

目标是让每个用户都在自己的线路上

Timestamp           recipients     Messagesubject      eventID
---------           ----------     ----------------    -------
01/01/2019 10:11:00 User1          Subject             Deliver
01/01/2019 10:11:00 User2          Subject             Deliver

2 个答案:

答案 0 :(得分:2)

如果结果中有嵌套数组,并且要提取它们,则可以使用嵌套循环和自定义对象,如下所示:

foreach ($recepient in $recepients){
    Foreach ($SingleRecipient in $recepient.Recipients) {
        [PSCustomObject]@{
            User = $SingleRecipient
            timestamp = $recepient.timestamp
            MessageSubject = $recepient.MessageSubject
            eventid = $recepient.eventid
        }
    }
}

答案 1 :(得分:0)

非常感谢。使用了pscustomobject并将其添加到变量中。

使用嵌套 foreach循环更有意义。