What powershell module can be used for taming your inbox?

0

I'm tired of trying to use Outlook's GUI to create / remove / manage inbox rules; it takes forever and it sucks.

I understand there are cmdlets in powershell that allow you do to this on the server-side as well as on the client-side.

I have no access to the server-side, I am only interested in managing my own inbox with these rules.

The following article seems to mention some cmdlets that would be great for this, but I can't use them because I don't know where to import the libraries from:

https://www.codetwo.com/admins-blog/managing-outlook-rules-powershell/

How do I install the cmdlets first? Where can I obtain them, and what do I need to import them into a script with?

leeand00

Posted 2020-02-09T19:24:08.220

Reputation: 14 882

These cmdlets refer to on-premises Exchange Server PowerShell. – harrymc – 2020-02-09T19:36:05.987

@harrymc Yes, so you're saying I can't use them if we have an off-premise exchange server that is hosted with Microsoft? I should at least be able to control my email client right? – leeand00 – 2020-02-09T19:38:38.157

You can control your local Exchange Server with them, not your Outlook client. – harrymc – 2020-02-09T19:40:23.477

Answers

2

Placing this here because it's too long for that comment section.

Taming your mailbox is a question of saying, are you talking just you on your stand-alone client (fat, cloud or both - remember you can add your Outlook.com account directly in your Outlook fat client.) or for users in your enterprise.

You don't use Exchange cmdlets to control local Outlook. To use Exchange cmdlets you must install the Exchange Management Shell on your computer ...

Install the Exchange management tools

...or use PowerShell Implicit Remoting to proxy those cmdlets to your host. Implicit remoting is how you use Exchange cmdlets for O365 as well. These are well documented/details by Microsoft and plenty of blogs all over the web and in Youtube videos.

Connect to Office 365 PowerShell

Connect to all Office 365 services in a single Windows PowerShell window

Connect to all Office 365 Services PowerShell (Supports MFA too)

Even prebuilt module for this effort.

Connect-O365 1.7.9

Connect to Office 365 Services using PowerShell

PowerShell script with helper functions to connect to Office 365 or Exchange On-Premises. Makes it easy to connect to different Office 365 services using the same credentials (non-MFA). No more needing to remember various ways to connect to each workload.

Managing users’ Outlook rules from Exchange Management Shell (with PowerShell)

Youtube - Powershell O365

Outlook online has a Rest API to work with as does Exchange, EWS

Office 365 Management APIs overview

Outlook client

Youtube -

Outlook REST APIs offer an easy way to access Mail, Calendar and Contacts data for any Office 365 or outlook.com user. In this video, we will go over some of the key functionality that is introduced in V2.0 of the API: Webhooks, Photos, Reminders and Timezone.

Use PowerShell to Data Mine Your Outlook Inbox

# Get-OutlookInBox function
Function Get-OutlookInBox
{
  <#

   .Synopsis
    This function returns InBox items from default Outlook profile

   .Description
    This function returns InBox items from default Outlook profile. It
    uses the Outlook interop assembly to use the olFolderInBox enumeration.

    It creates a custom object consisting of Subject, ReceivedTime, Importance,
    SenderName for each InBox item.

    *** Important *** depending on the size of your InBox items this function
    may take several minutes to gather your InBox items. If you anticipate
    doing multiple analysis of the data, you should consider storing the
    results into a variable, and using that.

   .Example
    Get-OutlookInbox |
    where { $_.ReceivedTime -gt [datetime]”5/5/11″ -AND $_.ReceivedTime -lt `

    [datetime]”5/10/11″ } | sort importance

    Displays Subject, ReceivedTime, Importance, SenderName for all InBox items that
    are in InBox between 5/5/11 and 5/10/11 and sorts by importance of the email.

   .Example
    Get-OutlookInbox | Group-Object -Property SenderName | sort-Object Count

    Displays Count, SenderName and grouping information for all InBox items. The most
    frequently used contacts appear at bottom of list.

   .Example
    $InBox = Get-OutlookInbox

    Stores Outlook InBox items into the $InBox variable for further
    “offline” processing.

   .Example
    ($InBox | Measure-Object).count

    Displays the number of messages in InBox Items

   .Example
    $InBox | where { $_.subject -match ‘2011 Scripting Games’ } |
    sort ReceivedTime -Descending | select subject, ReceivedTime -last 5
    Uses $InBox variable (previously created) and searches subject field
    for the string ‘2011 Scripting Games’ it then sorts by the date InBox.
    This sort is descending which puts the oldest messages at bottom of list.
    The Select-Object cmdlet is then used to choose only the subject and ReceivedTime
    properties and then only the last five messages are displayed. These last
    five messages are the five oldest messages that meet the string.

   .Notes
    NAME:  Get-OutlookInbox
    AUTHOR: ed wilson, msft
    LASTEDIT: 05/13/2011 08:36:42
    KEYWORDS: Microsoft Outlook, Office
    HSG: HSG-05-26-2011

   .Link
     Http://www.ScriptingGuys.com/blog

 #Requires -Version 2.0

 #>

 Add-type -assembly “Microsoft.Office.Interop.Outlook” | out-null

 $olFolders = “Microsoft.Office.Interop.Outlook.olDefaultFolders” -as [type]

 $outlook = new-object -comobject outlook.application

 $namespace = $outlook.GetNameSpace(“MAPI”)

 $folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
 $folder.items |

 Select-Object -Property Subject, ReceivedTime, Importance, SenderName

} #end function Get-OutlookInbox

You must be an admin in O365 to do this. Outlook in O365 is not Exchange, just like Outlook on your desktop is not Exchange. You must use Outlook COM (as noted above and to follow) to work on Outlook client, this is not a thing for Online.

PowerShell Retrieves Outlook Addresses

How to: Send mail from Powershell using Outlook

Manipulating Outlook objects with Powershell

postanote

Posted 2020-02-09T19:24:08.220

Reputation: 1 783

1

As far as i know, there is no standard powershell module available for Outlook, however you can make use of the Outlook API that gives access to the Microsoft.Office.Interop.Outlook namespace. Aa short example to create a new rule is as follows:

First we get the namespace:

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")

Now we specificy the originating folder (Inbox), create a new rule and specify the folder to copy to (Notifications)

$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$MyFolder1 =
  $namespace.Folders.Item('joe.leibowitz@companyname.com').Folders.Item('NOTIFICATIONS')
$rules = $namespace.DefaultStore.GetRules()
$rule = $rules.create("My rule1: Receiving Notification",
  [Microsoft.Office.Interop.Outlook.OlRuleType]::olRuleReceive)

$rule_body = $rule.Conditions.Subject
$rule_body.Enabled = $true
$rule_body.Text = @('Completed Notification')
$action = $rule.Actions.CopyToFolder
$action.enabled = $true
  [Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember(
    "Folder",
    [System.Reflection.BindingFlags]::SetProperty,
    $null,
    $action,
    $MyFolder1)
$rules.Save()

You can find more examples and information on using the outlook namespace in powershell here: https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/march/powershell-managing-an-outlook-mailbox-with-powershell

Additionally, you can find all the information about the Outlook object model here: https://docs.microsoft.com/nl-nl/office/vba/api/overview/Outlook/object-model

Silbee

Posted 2020-02-09T19:24:08.220

Reputation: 46

I tried this locally, but I get an error about New-Object : Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). – leeand00 – 2020-02-09T20:09:21.360