PowerShell Corner – Outlook

In this article, we will use PowerShell to tinker around in Outlook (joking aside, until you are sure what the code you are planning to execute in Outlook actually does, use a test account or at least run the code line-by-line in debugging mode and check what happens. If your code runs out of control, it can cause a lot of confusion or even irreparable damage!).

First of all, we need to prepare the Outlook object and address space:

$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $Outlook.GetNameSpace("MAPI")

Among the most common tasks is of course reading:

	$folder=$namespace.GetDefaultFolder(6)
	$folder.Items | 
    	?{$_.subject -match "TEST" } |
    		sort receivedtime -desc | 
    		%{
         		echo $_.body 
         		$_.Unread=$false        
     		}

And sending messages:

$Mail = $Outlook.CreateItem(0)
$Mail.To = »ales@kompas-xnet.si«
$Mail.Subject = »TEST«
$Mail.Body =«testno sporočilo«
$Mail.Send()   

In the first case, we can notice a reference to DefaultFolder. Because the top folders in Outlook are enumerated, we can view them in this way:

$OutlookFolders = $Outlook.Session.Folders.Item(1).Folders
$OutlookFolders | ft FolderPath

Alternatively, we can reference them individually:

$OutlookDeletedITems = $Outlook.session.GetDefaultFolder(3)
$outlookOutbox = $Outlook.session.GetDefaultFolder(4)
$OutlookSentItems = $Outlook.session.GetDefaultFolder(5)
$OutlookInbox = $Outlook.session.GetDefaultFolder(6)
$OutlookCalendar = $Outlook.session.GetDefaultFolder(9)
$OutlookContacts = $Outlook.session.GetDefaultFolder(10)
$OutlookJournal = $Outlook.session.GetDefaultFolder(11)
$OutlookNotes = $Outlook.session.GetDefaultFolder(12)
$OutlookTasks = $Outlook.session.GetDefaultFolder(13)

If any of the folders above has subfolders, we can also reach them by name:

$Outlook.Session.Folders.Item(1).Folders.Item(»Inbox«).Folders.Item(»Test«)

We can view messages in those folders in tabular mode in the following way:

$EmailsInFolder = $Outlook.Session.Folders.Item(1).Folders. Item(»Inbox«).Folders.Item(»Test«).Items
$EmailsInFolder | ft SentOn, Subject, SenderName, To, Sensitivity -AutoSize -Wrap

We can also reach the calendar:

$OutlookCalendar = $Outlook.session.GetDefaultFolder(9)

And read events from it:

$OutlookCalendar.Items | ft subject, start

Or create a new one:

$NewEvent = $Outlook.CreateItem(1)
$NewEvent.Subject = »Članek za piko«;
$NewEvent.Start = [datetime]«/4/26/2018«;
$NewEvent.save()

We can read tasks in this way:

$OutlookTasks = $Outlook.session.GetDefaultFolder(13).Items
$OutlookTasks | ft Subject, Body

Or, as in the case of the calendar, create new ones:

$newTaskObject =  $Outlook.CreateItem("olTaskItem")
$newTaskObject.Subject = »pika!«
$newTaskObject.Body = »nikar ne pozabi«
$newTaskObject.Save()

Finally, we may also be interested in contacts. We can list the in the following way:

$OutlookContacts = $Outlook.session.GetDefaultFolder(10).items
$OutlookContacts| Format-Table FullName,MobileTelephoneNumber,Email1Address

We can also add a new one:

$OutlookContacts = $Outlook.session.GetDefaultFolder(10)
$NewContact = $OutlookContacts.Items.Add()
$NewContact | gm
$NewContact.FullName = »Janez Novak«
$NewContact.Email1Address = »janez.novak@gmail.com«
$NewContact.Save()

Leave a Reply

Your email address will not be published. Required fields are marked *