【问题标题】:Splitting arrays in foreach在foreach中拆分数组
【发布时间】:2019-02-10 01:36:13
【问题描述】:

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

当我运行以下命令时:

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

收件人显示为列表。

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

也尝试使用:

Split-Array -inArray $user -Size 1

进展不大。

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

时间戳收件人 Messagesubject eventID --------- ---------- ---------------- -------- 01/01/2019 10:11:00 {User1,User2} 主题交付
$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

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

时间戳收件人 Messagesubject eventID --------- ---------- ---------------- -------- 2019 年 1 月 1 日 10:11:00 用户 1 主题交付 2019 年 1 月 1 日 10:11:00 用户 2 主题交付

【问题讨论】:

  • 您将需要一个嵌套的 foreach 循环来提取收件人属性中的用户。
  • [1] 这个$recepients = get-messagetrackinglog 没有收到recipients ...它正在收到消息。 [grin] [2] 这意味着这个foreach ($recepient in $recepients) 没有给你的recipients ...它给你messages。 [3] 这意味着这个$user = $recepient.Recipients 最终会为您提供一个或多个实际收件人。 ///// 如果您希望将这些收件人列在单独的行上,您将需要遍历该列表。如果您只想扩展列表,请使用$Message.Recipients -join ';' 为您提供分号分隔的文本字符串。

标签: arrays powershell foreach


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    非常感谢。使用 pscustomobject 以及将其添加到变量中进行扩展。

    使用 nested foreach 循环更有意义。

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 1970-01-01
      • 2015-10-30
      • 2010-11-20
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多