2

EWSマネージAPIを使用して電子メールをプルし、アドレスからアドレスへの件名、およびinternetmessageheadersを読み取るPowerShellスクリプトがあります。電子メール読み取りループ内で、このすべての情報をデータテーブルにロードします。

メッセージごとに上記のすべての情報を取得し、fromアドレスに基づいて配列またはデータテーブルにデータを入力する必要があります。次に、リレー情報を確認し、アドレスからターゲットアドレスに基づいてリスト全体を送信します。

fromアドレスリストの作成方法に頭を悩ませているようには思えません。データテーブルデータをハッシュテーブルに変換してから、を使用しsort|get-uniqueて一意のfromアドレスのリストを取得しようとしましたが、この情報を使用してfromアドレス配列を正しく構築できませんでした。を使用してループを試しました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                        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のすべての情報を別の変数にgrepして、他の任意の数の繰り返しまたは非繰り返しのアドレスに対して同じことを実行できる必要があります。

次に、各fromアドレス変数を取得して、ターゲットの受信者に送信します。

どんな助けでも大歓迎です。

4

2 に答える 2

1

Group-Objectを使用してみてください。その後、各グループに対してforeachループを実行できます。

$Grouping = $msgTable | Group-Object -Property From
foreach ($Group in $Grouping)
{
    Write-Host $Group.Name -ForegroundColor "Green"
    $Group.Group | ft -Auto
}
于 2013-01-16T19:15:17.717 に答える
1

かっこいい運動!これが私がそれにアプローチする方法です...

...user2@company.comのすべての情報を別の変数にgrepできるようにする必要があります

$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
}

私はこれが正確に正しくないことを知っています、しかしそれはあなたを正しい方向に押しやるはずです。

于 2013-01-16T20:30:11.357 に答える