Outlook e-mailek olvasása a PowerShell segítségével
Nézzük meg, hogyan lehet megnyitni, olvasni és elemezni az e-maileket egy csatlakoztatott Outlook-postafiókban egy PowerShell-szkriptből. Az Outlook MAPI segítségével közvetlenül elérheti a postafiókot, listázhatja a postafiók elemeit, és elolvashatja az e-maileket (beleértve a feladó címét, tárgyát, törzsét stb.).
Ez a forgatókönyv megköveteli, hogy az Outlook telepítve legyen a számítógépen, és legyen konfigurált postafiókprofil. Bármilyen levelezőszerverről olvashat postafiókot, beleértve az Exchange, az Outlook.com, a Gmail, az AOL, a Yahoo stb.
Ahhoz, hogy a PowerShell hozzáférhessen a postafiók tartalmához, futnia kell az Outlooknak a számítógépen. Ellenőrizze, hogy fut-e az outlook.exe folyamat, és futtassa a háttérben a következő paranccsal:
$OutlookProc = ( Get-Process | where { $_.Name -eq "OUTLOOK" } )
if ( $OutlookProc -eq $null ) { Start-Process outlook.exe -WindowStyle Hidden; Start-Sleep -Seconds 5 }Most be kell töltenie a .NET osztályt, és létre kell hoznia egy Outlook-példányt:
Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.ApplicationA postafiók tartalma a MAPI protokoll névterén keresztül érhető el:
$namespace = $Outlook.GetNameSpace("MAPI")
Egy postafiókban több mappa is lehet. Postafiók mappáinak listázása:
$NameSpace.Folders.Item(1).Folders | FT FolderPathMegjelenítheti a mappák listáját fanézetben, és megszámolhatja az egyes mappákban lévő e-mail elemek számát:
Function Listfolders
{
param($Folders, $Indent)
ForEach ($Folder in $Folders | sort-object name)
{
write-host $Indent$($Folder.Name)" ("$($Folder.Items.Count)")"
Listfolders $Folder.Folders $Indent" "
}
}
ListFolders $namespace.Folders ""
A bejövő e-mailek mappa alapértelmezett nevének megtudásához futtassa a következő parancsot (alapértelmezés szerint ez a Inbox mappa, de ez a név a nyelvi/regionális beállításoktól függően változhat):
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)Listázza az e-maileket a Beérkezett üzenetek mappában a következő formátumban: feladó címe, címzettje, tárgya, mérete és a beérkezés dátuma.
$inbox.Items | ft SenderEmailAddress, To, Subject, Size, ReceivedTimeAz egyszerű PowerShell Where-Object szűrő lehetővé teszi adott e-mailek keresését. Például listázza ki a mai napon egy adott feladótól kapott e-maileket:
$currentDate = Get-Date
$inbox.Items | Where-Object { $_.ReceivedTime -like "*$currentDate*" -and $_.SenderEmailAddress -eq "[email "}Megjelenítheti az e-mail tárgyát és törzsét. Az e-mail törzse egyszerű szövegben is megjeleníthető (
Bodytulajdonság) vagy HTML formátumban (
HTMLBodyingatlan). Ebben a példában a legutóbb kapott e-mail törzse jelenik meg:
$inbox.Items($inbox.Items.Count)|select SenderEmailAddress,subject,Body,HTMLBody|fl
Az UnRead attribútum segítségével ellenőrizheti, hogy az Exchange-felhasználó elolvasta-e az e-mailt.
Ha az e-mail mellékletet tartalmaz, elmentheti a mellékletet egy helyi meghajtóra:
$email= $inbox.Items($inbox.Items.Count)
if ($Email.Attachments.Count -gt 0) {
$Attachment = $Email.Attachments.Item(1)
$Attachment.SaveAsFile("C:\Downloads\$($Email.Attachments.Item(1).FileName)")
}Az utoljára kapott e-mail törlése a postafiókból:
$email= $inbox.Items($inbox.Items.Count)
$Email.Delete()A PowerShell segítségével hozzáférhet Outlook-postafiókjához olyan automatizálási szkriptekben, amelyek megkövetelik bizonyos műveletek végrehajtását, amikor bejövő e-mailt kap. A Feladatütemező feladat segítségével futtasson egy PS1-szkriptet a postafiók ellenőrzéséhez.


