Configuration

Update to AAD Network Communications Test

This week, I’ve got a few updates for the AAD Network Communications Test!

  • I’ve moved it to the PowerShell Gallery.  You can now install it with PowerShellGet by using the command:
    Install-Script -Name AADConnect-CommunicationsTest
  • I’ve updated the GCC High and DOD endpoints to the best of my ability (I’m always looking for feedback on this, so if you have new endpoints, be sure to connect with me!)
[ 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 ]
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 ]

Configuration

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 ]

Information

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 ]