如何基于Powershell中的多个匹配字段值创建数据子集?
我有一个powershell脚本,它使用EWS管理的API提取电子邮件,读取邮件的主题、从地址到地址以及InternetMessageHeader。在电子邮件读取循环中,它将所有这些信息加载到数据表中 我需要获取每条消息的所有上述信息,并根据发件人地址填充一个数组或数据表。然后,我将检查中继信息,并根据from地址将整个列表发送到目标地址 我似乎不知道如何从地址列表中构建地址。我曾尝试将datatable数据转换为哈希表,然后使用如何基于Powershell中的多个匹配字段值创建数据子集?,powershell,Powershell,我有一个powershell脚本,它使用EWS管理的API提取电子邮件,读取邮件的主题、从地址到地址以及InternetMessageHeader。在电子邮件读取循环中,它将所有这些信息加载到数据表中 我需要获取每条消息的所有上述信息,并根据发件人地址填充一个数组或数据表。然后,我将检查中继信息,并根据from地址将整个列表发送到目标地址 我似乎不知道如何从地址列表中构建地址。我曾尝试将datatable数据转换为哈希表,然后使用排序| get unique来获取唯一发件人地址列表,但未能使用此
排序| get unique
来获取唯一发件人地址列表,但未能使用此信息正确构建发件人地址数组。我尝试过使用select字符串$\u-allmatches
循环,但没有找到任何地方
这是我代码的一部分,它创建datatable并使用来自每个电子邮件的信息填充它
$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 user1@company.com recipient1@yahoo.com Received-SPF=pass (domain of ...
Message2 user2@company.com recipient2@comcast.net Received=from imta27.mailguys...
Message2 user2@company.com recipient3@yahoo.com Received-SPF=pass (domain of ...
Message3 user3@company.com recipient4@sbcglobal.net Received-SPF=pass (domain of ...
我需要能够把所有的信息都发出来user2@company.com到另一个变量,并对任意数量的其他重复或非重复地址执行相同操作
然后,我将获取每个from地址变量并将其发送给目标收件人
非常感谢您的帮助。尝试使用Group对象,然后可以对每个分组运行foreach循环:
$Grouping = $msgTable | Group-Object -Property From
foreach ($Group in $Grouping)
{
Write-Host $Group.Name -ForegroundColor "Green"
$Group.Group | ft -Auto
}
很酷的运动!这就是我的方法 …我需要把所有的信息都发出来 user2@company.com到另一个变量 …并对任何数量的其他重复或非重复执行相同操作 从地址
我知道这并不完全正确,但它应该把你推向正确的方向。谢谢你的回复;这就是我要去的地方,但还没有完全达到你的第二个例子。
$patternMatches = $msgTable | select-string -pattern 'user2@company.com'
$uniqueEmails = $msgTable | Select-Object From -Unique
foreach ($email in $uniqueEmails) {
$patternMatches = $msgTable | Select-Object -property * | select-string -pattern $email
}