Configuration
Featured

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.

But 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 ]

Configuration
Featured

ATP: Safe Attachments, Safe Links, and Anti-Phishing Policies or “All the policies you can shake a stick at”


With the advent of scammers, spammers, phishers, and other types of baddies, and the complementary rise in anti-malware, anti-spam, domain and sender verification techniques, we’re in a perpetual cat-and-mouse game.  I’ve had several customers over the past few weeks ask me about best practices for configuring some of the Advanced Threat Protection (ATP) features.… [ Continue reading ]

eDiscovery

Office 365 Security & Compliance Center eDiscovery – Part 1: Overview of Content Search and Core eDiscovery

Part of my role over the last few years has been educating customers about how Office 365 eDiscovery works.  While we have lots of documentation on how things work, we don’t have a whole lot actually showing what it looks like in action (to know if you’re doing it right).… [ Continue reading ]

Information

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 ]

Client

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)\MicrosoftOffice\root\Office16"
SET CURRLOCATION64="C:\Program Files\MicrosoftOffice\root\Office16"
SET PREV1LOCATION32="C:\Program Files (x86)\MicrosoftOffice\root\Office15"
SET PREV1LOCATION64="C:\Program Files\MicrosoftOffice\root\Office15"
SET PREV2LOCATION32="C:\Program Files (x86)\MicrosoftOffice\root\Office14"
SET PREV2LOCATION64="C:\Program Files\MicrosoftOffice\root\Office14"

REM Check for 64-bit versions
IF EXIST ""%CURRLOCATION64%\MANIFEST.XML""
[ Continue reading ]
Information

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 ]
Configuration

Resolved: SharePoint Online web site does not support SharePoint Online credentials

This afternoon, while working on my upcoming book for the MS-300 exam, I was attempting to sign into SharePoint Online via PowerShell and encountered this moderately cryptic message:

Cannot contact web site 'https://tenant-admin.sharepoint.com/' or the web site does not support SharePoint Online 
credentials.
[ Continue reading ]
Personal

Creating an Array with Headers and Columns from a string using [PSCustomObject]

Today, I was updating a script I wrote a while ago, and I wanted to streamline the processing loops once input was received.  This particular script took parameters for:

  • Identity (as an email address or UserPrincipalName)
  • CSV (with either no header or a header of UserPrincipalName)
  • Target environment type (either Active Directory or Office 365/Azure AD, which return a UserPrincipalName property with Get-ADUser or Get-AzureADUser)

I had gone the “easy” route and just done a simple If/Then to see if the Identity parameter had been passed, and if it had, run a separate chunk of code (which made troubleshooting or updates much harder since I had to keep two branches of the code synced when I made updates).… [ Continue reading ]

Configuration

Update to Create-LabUsers Script

My colleague Andreas asked today for some help troubleshooting an issue he’d run into with the Create-LabUsers script failing while using the InflateMailboxes parameter.

The problem ended up being three-fold:

  • I had some pre-populated user names that had spaces in them
  • I hadn’t trimmed the spaces out when constructing the SMTP address (although I had for the UPN)
  • I didn’t test for a valid RFC sender address when constructing the mail

So, all of those things together conspired to generate errors whenever some of those user names were hit. … [ Continue reading ]