我收到一堆针对用户的自动警报。我的意思是...每天大约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。
现在,我没有错误地运行它,但是结果为空。
一旦我开始工作,我将优化脚本以将每个用户添加到数组中,然后计算每个用户的出现次数。
答案 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。
它正在将物品扫描到一个地址,而不是从。
嘘。
进行更改并运行它,没有问题。现在我要添加一个数组来计算用户名