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

时间:2018-02-05 20:44:35

标签: arrays powershell unique import-from-csv email-address

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

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

SERVER1     group1@somewhere.com
SERVER2     group1@somewhere.com
SERVER3     group1@somewhere.com ; group23@somewhereelse.com

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

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

-Unique off the排序对象`:

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

两个人都得到了结果:

group1@somewhere.com
group1@somewhere.com ; group23@somewhereelse.com

我想知道唯一“一切”的最佳方法,以便用分号分隔的第二行将被拆分并且也是唯一的,所以输出看起来像这样:

group1@somewhere.com
group23@somewhereelse.com

最好的方法是做什么,步骤多少?将以分号分隔的所有电子邮件地址首先拆分为唯一的数组元素并删除;(不确定如何执行此操作),然后在新阵列上执行唯一操作?在;

周围隐藏着一些空格

1 个答案:

答案 0 :(得分:1)

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

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

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