独特的一堆电子邮件地址,一行由分号分隔的倍数

问题描述 投票:0回答:1

我有一个服务器列表,每个服务器至少有一个与之关联的电子邮件分发列表作为“利益相关者”,我们可以联系停机等。

当我们进行维护时,我们会通过电子邮件发送所涉及的服务器的所有分发列表,并且存在重复,因为许多服务器都可以拥有相同的一个电子邮件联系人(SERVER1,SERVER2)。另一个问题是单个服务器也可能有多个电子邮件联系人(SERVER3),由分号分隔,因此在粘贴到Outlook时它们可以正确解析。

SERVER1     [email protected]
SERVER2     [email protected]
SERVER3     [email protected] ; [email protected]

现在,从电子表格的大数组,我做一个Get-Unique

$spreadsheetDataObject |
    select contacts, patchcycle |
    where {($_.patchcycle -eq "SpectreSat")} |
    Sort-Object contacts |
    select contacts |
    Get-Unique

或者-Unique off theSort-Objects`:

$spreadsheetDataObject |
    select contacts, patchcycle |
    where {($_.patchcycle -eq "SpectreSat")} |
    Sort-Object contacts -Unique |
    select contacts

两个都得到了我的结果:

[email protected]
[email protected] ; [email protected]

我想知道唯一“一切”的最佳方法,以便用分号分隔的第二行将被拆分并且也是唯一的,因此输出如下所示:

[email protected]
[email protected]

什么是最好的方法和步骤?将由分号分隔的所有电子邮件地址首先拆分为唯一的数组元素并删除;(不知道如何执行此操作),然后在新数组上执行唯一操作?也许修剪以及在;周围隐藏的情况空间。

arrays powershell unique import-from-csv email-address
1个回答
1
投票

ForEach-Object放在Where-ObjectSort-Object之间,将联系人分成单独的地址。由于你不再需要在patchcycle之后使用Where-Object属性,你可以简单地将输出传递给管道而不首先构造新对象:

... | Where-Object { $_.patchcycle -eq 'SpectreSat' } |
    ForEach-Object { $_.contacts -split '\s*;\s*' } |
    Sort-Object -Unique

正则表达式\s*;\s*自动删除分号周围的空格。

© www.soinside.com 2019 - 2024. All rights reserved.