解析具有关键短语的电子邮件的Outlook,想要将关键短语(及其值)导出到csv

时间:2019-08-01 19:11:00

标签: powershell outlook

我收到一堆针对用户的自动警报。我的意思是...每天大约800。

我想记录受影响的用户,我认为一种可靠的方法是解析电子邮件进入的文件夹,查找电子邮件,然后导出电子邮件中包含用户名的行。

电子邮件示例:

  

被锁定的帐户:

     

安全ID:S-x-x-xx-xxxxxxxxx-xxxxxxxxxx-xxxxxx-xxx

     

帐户名:jdoe

我想在第三行进行解析,然后转储第三行。到目前为止,我已经在脚本的第三行中使用了正则表达式。

Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$RE = [RegEx]'(?sm)Account Name\s*:\s*(?<AccName>.*?)$.*'

$Data = ForEach ($item in $inbox.items){
    if ($item.to -like "<email_that_the_alerts_come_from"){
        if ($item.body -match $RE){
            [PSCustomObject]@{
                AccName   = $Matches.AccName
            }
        }
    }
}
$Data 
$Data | Export-CSv '.\data.csv' -NoTypeInformation

我期望每行包含我想要的行的csv。

现在,我没有错误地运行它,但是结果为空。

一旦我开始工作,我将优化脚本以将每个用户添加到数组中,然后计算每个用户的出现次数。

2 个答案:

答案 0 :(得分:0)

您可以做的一件事是按每个换行符分割正文,然后对每行运行正则表达式。如果匹配,则用:将该行分隔开,然后将该值写入数组。

$split_body = $item.body.split("`n")

foreach ($line in $split_body)
{
    if ($line -match $RE){
        [PSCustomObject]@{
            AccName = $line.split(":")[1].trim()
        }
    }
}

答案 1 :(得分:0)

我是个大人物。

$ item.to应该是$ item.from。

它正在将物品扫描到一个地址,而不是从。

嘘。

进行更改并运行它,没有问题。现在我要添加一个数组来计算用户名