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アドレス変数を取得して、ターゲットの受信者に送信します。
どんな助けでも大歓迎です。