我有一个服务器列表,每个服务器都至少有一个与之关联的电子邮件分发列表作为“利益相关者”,我们可以联系停机等。
当我们进行维护时,我们通过电子邮件发送所涉及的服务器的所有分发列表,并且存在重复,因为许多服务器都可以拥有相同的一个电子邮件联系人(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
最好的方法是做什么,步骤多少?将以分号分隔的所有电子邮件地址首先拆分为唯一的数组元素并删除;
(不确定如何执行此操作),然后在新阵列上执行唯一操作?在;
。
答案 0 :(得分:1)
在ForEach-Object
和Where-Object
之间放置Sort-Object
,将联系人分成单独的地址。由于您在patchcycle
之后似乎不再需要Where-Object
属性,因此您可以简单地将输出传递给管道而不首先构造新对象:
... | Where-Object { $_.patchcycle -eq 'SpectreSat' } |
ForEach-Object { $_.contacts -split '\s*;\s*' } |
Sort-Object -Unique
正则表达式\s*;\s*
会自动删除分号周围的空格。