One of the the things that we’ve learned about the cloud over the past few years is that you still need an environment (a utility server, an app server, a something) to run batch jobs and custom scripts against your environments. … [ Continue reading ]
Generate a list of mailboxes whose litigation hold duration is less than a week away
While many people use Office 365 retention policies as part of their data governance strategy, there are many customers who either do not enforce retention or do so only for items under some sort of litigation hold.
In the olden days, when storage was at a premium, it was much more common to handle things this way. … [ Continue reading ]
Update to the Wipe-ExchangeOnlineMailbox tool
Who knew you’d need an update to a tool meant to delete things?
After working with a partner today and an out-of-control email application spamming user mailboxes, we decided an update was necessary. Outlook became unusable with several hundred thousand messages in Deleted Items. … [ Continue reading ]
Update to the Get-UserHoldPolicies Tool
A new year, a new update for Get-UserHoldPolicies! Woo!
I stumbled across some additional information today regarding deciphering hold policies for mailboxes while troubleshooting another issue and decided to update my Get-UserHoldPolicies tool to reflect it.
The core pieces that I added:
- Identifying Skype policies (as prefaced by sky in the InPlaceHolds property of a mailbox)
- Identifying excluded mailbox policies (as prefaced by -mbx in the InPlaceHolds property of a mailbox)
- Disposition action for items at the end of a retention period:
- Delete only
- Do nothing after retention period
- Delete after retention period
You can see a few of the new options here. … [ Continue reading ]
Searching the Office 365 Unified Audit Log for Specific Activities, Sites, and Users
Last week, I was working with a large government customer in a consolidated tenant (read: all agencies in a single, centrally-managed tenant). One of the questions that was presented was how to search and filter the audit log for entries relating to the following categories:
- Files shared by an agency or department’s users
- Files accessed in an agency’s SharePoint site collection
To that end, I based together this script. … [ Continue reading ]
Iterating hash values to a log file
While working on my last script, I was trying to figure out the best way to write the values stored in a hash table for the purposes of splatting out to a log file.
Consider:
$parameters = @{}
$parameters.Add("Parameter1","Value1")$parameters.Add("Parameter2","Value2")$parameters.Add("Parameter3","Value3")

I was using a modified version of my logging function, which is basically a wrapper for Add-Content with parameters for log detail/types, colors, and output display.… [ Continue reading ]
Migrating from Exchange Online eDiscovery and In-Place Hold to the Security & Compliance Center
One of the issues that some of my larger customers have been dealing with is the lack of tooling and planning around moving legacy Exchange Online In-Place eDiscovery & Holds to the new(ish) Security & Compliance Center. Our direction has been to either let them age out or manually recreate them the Security & Compliance Center.… [ Continue reading ]
Checking for compromised email accounts
UPDATE: I have posted the script to check against haveibeenpwned.com at the bottom in the TechNet Gallery. http://aka.ms/pwncheck
Yesterday, I participated in an escalation for a customer where one or more users had been successfully phished and had given up their credentials. … [ Continue reading ]
Find Allowed Users, Domains, and IPs in Office 365
If you’ve ever asked anyone how to do virtually anything, the answer is usually “It depends.” Just as there is no wrong way to eat a Reese’s Peanut Butter Cup and more than one way to skin a cat, so it frequently is with technological tasks. … [ Continue reading ]
Delegating Reporting Access for Exchange Online
Earlier this week, I had a request for assistance with delegating reporting features in Exchange Online to non-administrative users. This is a frequent topic of discussion when it comes to compliance and security officers validating that systems are not being misused by unauthorized persons.… [ Continue reading ]
Migrate-EOPSettings now does ATP!
ATP! ATP!
At long last, I’ve made a first pass at updating the Migrate-EOPSettings script to now include settings for Advanced Threat Protection. I’ve had several customers moving their instances from commercial EOP to Office 365 GCC, and while my Migrate EOP script would capture just about everything, it came to my attention that we still had configuration to do for ATP. … [ Continue reading ]
Updated Tool Roundup!
Hi! It’s a day ending in “y,” which means it’s a good day to update a script!
Today, while on-site with a customer and running my AAD Connect Permissions script, I noticed that the logging output wasn’t as helpful as I wanted it to be.… [ Continue reading ]
Header, header, wherefore art thine fields?
Today, I got it in my head that I wanted to create a script that would accept CSV input. In so doing, I wanted to make sure the CSV passed some sort of validation so that I didn’t end flooding a screen with errors, because nobody likes that.… [ Continue reading ]
Update to the Create-LabUsers tool
While working on my last mini-series, I utilized my Create-LabUsers tool to automate the creation of a few thousand objects. When I was synchronizing my AD users to another directory, I noticed that I didn’t have mailNickname populated and had to add a quick script to fill that value in. … [ Continue reading ]
AAD Connect, a dedicated resource forest, a custom connector, and a bunch of transform rules: a GalSync story (Part 2)
In part 1 of our adventure, we built an Azure AD lab to support configuring AAD Connect to work as a GalSync engine. In this post, we’ll finish up the configuration. As a reminder, this is the what the overall solution will look like:

And, as I mentioned in part 1:
Please don’t call Premier asking for support on this.… [ Continue reading ]
