With the rise of remote work over the past several weeks (now turned months and years), I’ve engaged with many customers who want to use Microsoft Teams to as part of their work-from-home tool set. Many of my customers have investments in both Microsoft Office 365 as well as Google G Suite Workspace or Google Apps (frequently with other third-party IdP, metadirectory, and federation services thrown in the mix), so it’s not always just as easy as “flipping a switch.”… [ Continue reading ]
Teams Private Channel eDiscovery
Yesterday, I was asked about the eDiscovery process for Private Channels in Teams.
It’s a little bit hairy at the moment, so I’ve included some scripting and examples to help you out with it.
[shameless plug] I’ve adapted some of this content from one of my books, Deploying Microsoft 365 Teamwork: Exam MS-300 Guide.[/shameless… [ Continue reading ]
MS-900 Exam Guide is Here!

It sure has been a busy month!  I’m still churning away on new content, but we did get this out the door: The Microsoft 365 Fundamentals MS-900 Exam guide!  MS-900 is an entry level exam designed to show mastery of core cloud and Microsoft 365 technologies concepts.… [ Continue reading ]
The MS-300 Exam Prep Guide LIVES!

After several months of hard work, the team at Packt has brought this book to life! The requisite shout-outs include:
Thanks to everyone who was patient with me and supported me along the way with pizza, tacos, good vibes, and positive feedback. … [ Continue reading ]
Flashback to what it took to do math in DOS batch files
While working on a script for an upcoming project, I wanted to test for the presence of various Office versions, including 32-bit and 64-bit components before initiating setup. Here’s one way I found:
@ECHO OFF SET CURRLOCATION32="C:\Program Files (x86)\Microsoft Office\root\Office16" SET CURRLOCATION64="C:\Program Files\Microsoft Office\root\Office16" SET PREV1LOCATION32="C:\Program Files (x86)\Microsoft Office\root\Office15" SET PREV1LOCATION64="C:\Program Files\Microsoft Office\root\Office15" SET PREV2LOCATION32="C:\Program Files (x86)\Microsoft Office\root\Office14" SET PREV2LOCATION64="C:\Program Files\Microsoft Office\root\Office14" REM Check for 64-bit versions IF EXIST ""%CURRLOCATION64%\MANIFEST.XML""… [ Continue reading ]
Pre-order the MS-900 Exam Guide now!
Surprise! I have another book! It’s available for pre-order on Amazon now.

This is gonna be a busy year for me. This time, I’m collaborating with two of my peers:
Together, we’re putting together the MS-900 exam guide, chock full of things you wish you would have known the first time you took the it. … [ Continue reading ]
Export Credential Manager to PowerShell
If you ever find yourself in a sticky wicket and need to extract usernames and passwords from Credential Manager (usually because you forgot them), you can use this handy-dandy little function from PowerShell:
function ExportCredMan
{
# Dump local passwords from credential manager
[void][Windows.Security.Credentials.PasswordVault,… [ Continue reading ] Pre-order the MS-300 Exam Guide Now!
Hey, everyone! I know I’ve been quiet for the last few weeks, but not without good cause. I’ve been furiously making edits and checking them twice for my newest book, “Deploying Microsoft 365 Teamwork: Exam MS-300 Guide.”
You can pre-order it at Amazon or on the Packt website. … [ Continue reading ]
Add Posh Test Gallery to add Microsoft Teams Test PowerShell Module
As luck would have it, I had to get the newest version of the Microsoft Teams PowerShell module. It’s still a test module and not available in the main PSGallery. So, I had to poke around and figure out how to add it and get the version that supports Get-TeamChannelUser.… [ Continue reading ]
Finding mis-licensed shared users in Office 365
Just a quickie post this holiday week.
Many customers have had Exchange on-premises forever. Back in the olden days, we just had user mailboxes. Need a shared team mailbox? You get a user mailbox. Need a conference room mailbox? You get a user mailbox.… [ Continue reading ]
Decrypting Credentials Stored in Remote Desktop Connection Manager (RDCMan) .rdg
Today, while logging into a Windows Server via my favorite RDP tool (RDCMan), I was faced with the “Your password has expired” prompt. No worries, just enter my password and change it.
Except for the part where the password has been saved and I neglected to add it to my password manager.… [ Continue reading ]
Guest Post: Flow SharePoint button workaround for GCC customers
So, for a while, there has been a gap in the Office 365 Government Community Cloud (GCC) SharePoint environment when it comes to the integration of Flow in GCC vs how it looks in our commercial environments. What is the difference we’re talking about?… [ Continue reading ]
Apply Security & Compliance Center Retention Labels to Outlook Folders
I couldn’t really come up with a cool-sounding title for this post, so I just went with the basics of what it does.
Last week, I worked with a customer that wanted to deploy custom retention labels to custom folders inside a user’s mailbox–the idea being that they would create a custom folder structure such as this under a user’s Inbox:
\Inbox
\Inbox\Retention Schedule
\Inbox\Retention Schedule\2 Year (apply a 2-year retention label to everything in this folder)
\Inbox\Retention Schedule\4 Year (apply a 4-year retention label to everything in this folder)
\Inbox\Retention Schedule\7 Year (apply a 7-year retention label to everything in this folder)
\Inbox\Retention Schedule\Forever (apply a ‘Never delete’ retention label to everything in this folder)
Seems easy enough, right? … [ Continue reading ]
Exchange Online Protection (EOP) Best Practices and Recommendations
Yes. I said it.
Someone needed to put a line in the sand and today, that person is me. I’m going to say these are some best practices.
Of course, your mileage may vary, depending on your type of organization–users at a local bank or city government will have different threats presented to them than an engineering firm with international customers, for example.… [ Continue reading ]
Update to Get-UserHoldPolicies
This certainly seems to be a day for updates! Based on some additional feedback from my peers, I’ve updated the Get-UserHoldPolicies script to exclude legacy Exchange MRM policies by default. MRM policies, while they have RetentionPolicyTags, are technically either moving or deleting content, not preserving it.… [ Continue reading ]

