Skip to main content

Posts

Showing posts with the label Exchange 2013

Generic Toolbox script for using EWS to enumerate Folders and Items in an Exchange Mailbox

There's a old saying that a tradesmen is only as good as their tools and the same can be said for ITPro's and developers. You can save yourself a lot of time when investigating particular tasks you want a script by having something ready built that can do 90% of task at hand.  I've decided to share a script that I use quite often during the investigation phase of any EWS scripting tasks that allows you to generically grab a folder (or collection of Folders) and the Items within those folder. While this is something that can be put together quite quickly together using snippets there always tends to be extra properties that you need for different tasks so the generic script I'm showing today includes all the niceties kind of like having the right sized spanner rather the shifter. So the script in question can be found on GitHub here  https://github.com/gscales/Powershell-Scripts/blob/master/GenericFolderAndItem.ps1 So what can it do Connect and show the properties ...

Reporting on the Public Folder favorites in a Mailbox using EWS and Powershell

Outlook and OWA allow you to create "Favorites" shortcuts to Public folders (and other folders for that matter) to make accessing them a faster experience. For those of us keeping pace with grinding Public Folders into dust (personally no longer a fan) and replacing them with Groups, it maybe useful to report on which Public Folders people have Favorited in their mailboxes for a metric and impact point of view. This information should then come in useful if your planing on migrating them (or just for a laugh). Because Public folder hierarchies are relatively complex having the path to the Public folder rather then just the name is generally a lot more useful. So in the script in this blog post we will look at producing a report of the Public Folder favorites and the Path of the Public Folders those shortcuts refer to eg it will produce a report something like the following for each mailbox you where to run it against. Like other mailbox shortcuts these favorites ar...

Mailbox Automapping forward and reverse map using Autodiscover and PowerShell

Auto-mapping was a feature that was introduced in Exchange 2010, where when you added Mailbox access permission via Add-MailboxPermission, Outlook would automatically add that Mailbox as an additional Mailbox. Outlook uses Autodiscover to get the information on these mailboxes that are auto mapped via the AlternateMailboxes user setting eg in XML it comes back like the following One thing you can't see easily via the Exchange Managed Shell cmdlet is which ACE's (Access Control Entries) have Automapping enabled on a particular Mailboxes DACL and which don't. You also can't easily see from one mailbox which mailboxes will be auto mapped to it (basically a reverse mapping).So the purpose of this script is to provide both a forward and reverse mapping of Automapping setting for a collection of Mailboxes that are passed into to. It produces a report that look like To get this collection you can either use a CSV file of addresses, Get-Mailbox or just a sta...

Mining the clientinfo property in Messages in Exchange 2013 and Office365 with EWS

Tracking the bewildering array of clients and different Internet browsers that are being used to send email on Exchange can be an interesting challenge especially when your clients are in the cloud. One Mapi property that gets set on the SentItem in the senders Mailbox can help answer some of these questions where logs may not be available. The Named Mapi property clientinfo eg So if you write a script that accesses this property on messages in the SentItems folder you can build a report of the different sending methods that are being used and also different properties such as the browser version from the agent string being stored eg something like this I've put a script on GitHub here https://github.com/gscales/Powershell-Scripts/blob/master/GetMailUserAgentsv2.ps1  that can mine the data in the property correctly taking into account the ; used as a separator while also dealing with data enclosed in ( ) (it does this by just doing a characte...

Finding the TimeZone being used in a Mailbox using EWS

If you ever have the need to create a number of events in user mailbox's from a central application or Script where the target Mailboxes span across different time zones then finding each target Mailbox's timezone is a critical thing. In this post I'm going to outline a few different methods of getting the TimeZone using EWS. If you have access to the Exchange Management Shell cmdlet's to find the users configured timezone you can use either the Get-MailboxCalendarConfiguration or Get-MailboxRegionalConfiguration cmdlets which show you the timezone settings of a Mailbox from the WorkHours configuration of that mailbox. The object in the Mailbox that the information is read from/stored in is the IPM.Configuration.WorkHours FAI (Folder Assoicated Items) object in the Calendar Folder of the Mailbox. So if you want to access the TimeZone setting in Mailbox just using EWS you need to Bind to this UserConfiguration object (FAI object) and th...

Using eDiscovery to do a Multi Mailbox search for Mailbox Item Statistics in Exchange

eDiscovery in Exchange 2013 and above has a multitude of uses when it comes to both data discovery and also reporting. One thing you can do with eDiscovery is run a single Query across multiple mailboxes using one request. A couple of month ago I posted this eDiscovery Powershell module on GitHub . This module has a number of cmdlets that does single mailbox queries using eDiscovery so I've created a new cmdlet Search-MultiMailboxesItemStats  for doing Multi Mailbox queries. This allows you to pass in an array of mailboxes you want processed and it will return statistics about how many Items and the Size of those items in bytes based on that query. For example to Query the number of Email received in the last month across a number of mailboxes use Search-MultiMailboxesItemStats -Mailboxes @( 'mailbox@domain.com','mailbox2@domain.com' )  -QueryString ('Received>' + (Get-Date).AddDays(-31).ToString("yyyy-MM-dd")) And it will output something l...

Text Emoticon Outlook and OWA Compose App

Emojis and emoticons have been around for quite a while but are picking up a bit of steam of late with the release of Windows 10. The Daily mail had a really good article on their use recently which is worth a read. Like everything these new emoji's have there origins  story and text based emoticons (which have many other names) are kind of a interesting sub branch with a slightly retro feel. In this post I'm going to show you how you can create a Mail App to make using text emoticon's easy in Exchange 2013 and Office365 using the new compose apps feature which was introduced last year at MEC. Compose apps are one way of easily extending the User interface in OWA and Outlook 2013 (and 2016). So for this example I can do something like the following to make these text emoticons easy to insert into either the Subject or Body of a message (you need to active the app by selecting the Addin Button in OWA or Apps for Office in Outlook) At this point it should ...

Finding a Contact with a Body flag using EWS and eDiscovery (eg added from Microsoft Lync)

With the average size of Mailbox\Archives getting larger by the day eDiscovery on Exchange 2013 is useful for a broad array of tasks. eDiscovery makes use of the KQL (Keyword Query Language https://msdn.microsoft.com/EN-US/library/office/ee558911(v=office.15).aspx  ) which allows you to query for both free text and Queryable properties that have been indexed by the Exchange store and it also allows the use of some more complex operators such as proximity and Synonyms. Let's look at a specific user case for eDiscover, the Lync client on 2013 will automatically add contacts to your Exchange Mailbox in the "Lync Contacts" folder and flag the body of the contact with something like 2/02/2015 This contact was added from Microsoft Lync 2013 (15.0.4675.1000) (if you want to bind directly to the Lync Contacts folder in 2013 you should be able to use the QuickContacts WellKnownFolder Enum eg $folderid= new-object Microsoft.Exchange.WebServices.Data.Fold...
All sample scripts and source code is provided by for illustrative purposes only. All examples are untested in different environments and therefore, I cannot guarantee or imply reliability, serviceability, or function of these programs.

All code contained herein is provided to you "AS IS" without any warranties of any kind. The implied warranties of non-infringement, merchantability and fitness for a particular purpose are expressly disclaimed.