我有一个服务器列表,每个服务器至少有一个与之关联的电子邮件分发列表作为“利益相关者”,我们可以联系停机等。
当我们进行维护时,我们会通过电子邮件发送所涉及的服务器的所有分发列表,并且存在重复,因为许多服务器都可以拥有相同的一个电子邮件联系人(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 the
Sort-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]
什么是最好的方法和步骤?将由分号分隔的所有电子邮件地址首先拆分为唯一的数组元素并删除;
(不知道如何执行此操作),然后在新数组上执行唯一操作?也许修剪以及在;
周围隐藏的情况空间。
将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*
自动删除分号周围的空格。