我有一个 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/