powershell - 如何在Powershell中基于多个匹配字段值创建数据子集?

标签 powershell

我有一个 powershell 脚本,它使用 EWS 托管 API 提取电子邮件,读取其主题、从地址到地址以及互联网消息标题。在电子邮件读取循环中,它将所有这些信息加载到数据表中。

我需要获取每条消息的所有上述信息,并根据发件人地址填充数组或数据表。然后我将检查中继信息并根据从地址将整个列表发送到目标地址。

我似乎无法理解如何构建发件人地址列表。我尝试将数据表数据转换为哈希表,然后使用 sort|get-unique 获取唯一来自地址的列表,但无法使用此信息来正确构建来自地址数组。我尝试过使用 select-string $_ -allmatches 进行循环,但没有成功。

这是我的代码的一部分,它创建数据表并使用每封电子邮件中的信息填充它。

$msgTable = New-Object system.Data.DataTable “Messages”
$col1 = New-Object system.Data.DataColumn Subject,([string])
$col2 = New-Object system.Data.DataColumn From,([string])
$col3 = New-Object system.Data.DataColumn To,([string])
$col4 = New-Object system.Data.DataColumn Relay,([string])
$msgTable.columns.add($col1)
$msgTable.columns.add($col2)
$msgTable.columns.add($col3)
$msgTable.columns.add($col4)

$frItemResult = $PublicFolder.FindItems($sfCollection,$view)
# Loop through view results and mark read
$frItemResult | ForEach-object{
if($_.HasAttachments ) {
$_.Load()
"Report Subject: $($_.Subject)"
# Loop through attachments, extract info
$_.Attachments | ForEach-object  {
if($_.Name -notmatch "ATT00001"){
$_.Load($attPropset)

$row = $msgTable.NewRow();$row.Subject = $($_.item.Subject); $row.From = ($_.item.From.address); $row.To = $($_.item.ToRecipients.address); $row.Relay = "$($_.Item.InternetMessageHeaders | Where-Object {$_.name -like "*received*"})";$msgTable.Rows.Add($row) 

这是填充数据后 $msgTable 的样子。

Subject                          From                             To                               Relay                           
-------                          ----                             --                               -----                           
Message1                        <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9aefe9ffe8abdaf9f5f7eafbf4e3b4f9f5f7" rel="noreferrer noopener nofollow">[email protected]</a>           <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7e0c1b1d170e171b100a4f3e071f161111501d1113" rel="noreferrer noopener nofollow">[email protected]</a>               Received-SPF=pass (domain of ...
Message2                        <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7603051304443615191b0617180f5815191b" rel="noreferrer noopener nofollow">[email protected]</a>           <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2e5c4b4d475e474b405a1c6e4d41434d4f5d5a00404b5a" rel="noreferrer noopener nofollow">[email protected]</a>             Received=from imta27.mailguys...
Message2                        <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f085839582c2b0939f9d80919e89de939f9d" rel="noreferrer noopener nofollow">[email protected]</a>           <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9fedfafcf6eff6faf1ebacdfe6fef7f0f0b1fcf0f2" rel="noreferrer noopener nofollow">[email protected]</a>               Received-SPF=pass (domain of ...
Message3                        <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3c494f594e0f7c5f53514c5d5245125f5351" rel="noreferrer noopener nofollow">[email protected]</a>           <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="93e1f6f0fae3faf6fde7a7d3e0f1f0f4fffcf1f2ffbdfdf6e7" rel="noreferrer noopener nofollow">[email protected]</a>           Received-SPF=pass (domain of ...

我需要能够 grep 出 [email protected] 的所有信息到另一个变量并对来自地址的任意数量的其他重复或非重复执行相同的操作。

然后,我将获取每个发件人地址变量并将其发送给目标收件人。

非常感谢任何帮助。

最佳答案

尝试使用 Group-Object,然后您可以针对每个分组运行 foreach 循环:

$Grouping = $msgTable | Group-Object -Property From
foreach ($Group in $Grouping)
{
    Write-Host $Group.Name -ForegroundColor "Green"
    $Group.Group | ft -Auto
}

关于powershell - 如何在Powershell中基于多个匹配字段值创建数据子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362365/

相关文章:

xml - 如何使用Powershell读取o:xml?

powershell - 如何使用 Azure REST API 创建一个与私有(private) Github 存储库集成的新 Azure 网站?

Powershell:仅返回搜索的第二行

powershell - 如何确定我是在Powershell还是cmd中?

windows - 在大型目录结构上运行时出现元数据导出错误

function - 将代表软件版本的两个数字与几个点进行比较

powershell - 如何使用 Powershell 验证保留 IP

visual-studio-2010 - 如何在 Visual Studio 2010 中自动化实体数据模型向导

powershell - 如何使用 Powershell 递归通过目录树查找文件

azure - 更改执行策略并启用 PowerShell 脚本的执行