DEV Community

Cover image for Solved: Am I the only one who feels like Microsoft’s constant rebranding is making our jobs significantly harder?
Darian Vance
Darian Vance

Posted on • Originally published at wp.me

Solved: Am I the only one who feels like Microsoft’s constant rebranding is making our jobs significantly harder?

🚀 Executive Summary

TL;DR: Microsoft’s constant rebranding from Azure AD to Entra ID signifies a deep technical shift, deprecating old APIs and PowerShell modules like MSOnline and AzureAD. This guide offers immediate patches, a permanent migration to the Microsoft Graph SDK, and an architectural abstraction layer to manage these changes and prevent future operational risks.

🎯 Key Takeaways

  • The shift from Azure AD to Entra ID is a technical migration to the Microsoft Graph API, deprecating legacy Azure AD Graph API and modules like MSOnline and AzureAD.
  • Immediate script fixes involve explicitly installing legacy modules such as AzureAD using Install-Module AzureAD as a temporary measure to restore functionality.
  • The future-proof solution requires migrating scripts to the Microsoft.Graph PowerShell SDK, utilizing Connect-MgGraph with explicit scopes and new Verb-Mg cmdlets for operations.

Microsoft’s constant rebranding from Azure AD to Entra ID breaking your scripts? This guide from a senior engineer breaks down the root cause and provides three practical fixes, from a quick patch for emergencies to a permanent architectural solution.

Surviving the Microsoft Name Game: A DevOps Guide to When ‘Azure AD’ Becomes ‘Entra ID’

It was 2 AM. The on-call alert blared for a P1 incident: our automated user de-provisioning pipeline for the prod-db-01 cluster had failed. The error was maddeningly simple: The term 'Remove-MsolUser' is not recognized as the name of a cmdlet.... We hadn’t changed a thing. The script had run flawlessly for two years. Except, Microsoft had. A new runner image had been deployed to our CI/CD farm, and the old MSOnline module we depended on was gone, deprecated in favor of something new. If you’ve felt that same jolt of confusion and frustration wrestling with the shift from “Azure Active Directory” to “Microsoft Entra ID,” you’re not just complaining—you’re identifying a real operational risk.

So, Why Is This Breaking Our Stuff?

Let’s get one thing straight: this isn’t just marketing slapping a new label on a product. The name change from Azure AD to Entra ID is the public-facing sign of a much deeper technical shift that’s been happening for years. Microsoft is moving everything to a single, unified endpoint: the Microsoft Graph API.

This means two critical things for us in DevOps:

  • Old APIs are being retired: The legacy Azure AD Graph API is on its final countdown to deprecation.
  • Old PowerShell Modules are obsolete: The modules we’ve relied on for years, MSOnline and AzureAD, which talk to those old APIs, are being replaced by the new, sprawling Microsoft.Graph SDK.

When your script suddenly fails, it’s likely because the environment it’s running in no longer has those old modules installed, or the underlying API it’s trying to call is no longer available. Now, let’s fix it.

Fix #1: The Quick & Dirty (The Emergency Patch)

Your production pipeline is down and you need it working five minutes ago. This is not the time for a full refactor. This is triage. The goal here is to restore functionality on a server or agent where the old modules are missing.

Your quickest bet is to explicitly install the legacy module as part of your script’s initialization. It’s a hack, and it’s accumulating technical debt, but it gets the lights back on.

# PowerShell script to quickly restore a broken process

# Check if the old module exists, if not, install it.
if (-not (Get-Module -ListAvailable -Name AzureAD)) {
    Write-Warning "AzureAD module not found. Installing for compatibility..."
    Install-Module AzureAD -Force -Scope CurrentUser -AllowClobber -Repository PSGallery
}

# --- Your old script logic continues here ---
Connect-AzureAD -TenantId "YOUR_TENANT_ID"
Get-AzureADUser -ObjectId "user@yourcompany.com"
# ...etc
Enter fullscreen mode Exit fullscreen mode

Warning: This is a band-aid on a bullet wound. The AzureAD module is on a deprecation path. This fix will buy you time, but it will break permanently in the future when Microsoft fully pulls the plug on the backend APIs.

Fix #2: The Permanent Fix (Embrace the Graph)

This is the “eat your vegetables” solution. The right way forward is to migrate your scripts to use the new Microsoft.Graph PowerShell modules. It’s a pain, the syntax is different, and the permission model is more granular (and complex), but it’s the only future-proof path.

The learning curve involves understanding that Microsoft.Graph is a huge SDK broken into smaller modules. You’ll connect differently, and the cmdlets have a new Verb-Mg naming convention.

Here’s a common before-and-after scenario:

Old Way (AzureAD Module) New Way (Microsoft.Graph Module)
Install-Module AzureAD Install-Module Microsoft.Graph.Users
Connect-AzureAD Connect-MgGraph -Scopes "User.Read.All"
Get-AzureADUser -ObjectId "user@a.com" Get-MgUser -UserId "user@a.com"
New-AzureADGroup -DisplayName "My Group" New-MgGroup -DisplayName "My Group"

Your new script startup might look like this:

# The "correct" way to do things now
# First, ensure the necessary Graph modules are installed
Install-Module Microsoft.Graph.Users, Microsoft.Graph.Groups -Scope CurrentUser -Force

# Note the new connection method with explicit permissions (Scopes)
# This is a major change from the old way!
Connect-MgGraph -Scopes "User.Read.All, Group.ReadWrite.All"

# Find a user and add them to a new group
$user = Get-MgUser -UserId "darian.vance@techresolve.com"
$group = New-MgGroup -DisplayName "DevOps Leads" -MailEnabled $false -SecurityEnabled $true

New-MgGroupMember -GroupId $group.Id -DirectoryObjectId $user.Id

Write-Host "User $($user.DisplayName) added to group '$($group.DisplayName)'"
Enter fullscreen mode Exit fullscreen mode

Fix #3: The ‘Nuclear’ Option (Build an Abstraction Layer)

If you’re leading a team and have dozens or hundreds of automation scripts, fixing them one by one is a nightmare. Every time Microsoft changes its mind, you have to repeat the process. This is where you, as an architect, can provide a powerful solution: an abstraction layer.

The idea is to create your own internal PowerShell module, let’s call it TechResolve.Identity. This module contains functions that your team will use, like:

  • Get-TRUser
  • Set-TRUserPassword
  • Add-TRUserToGroup

Inside these functions, you write the logic using the Microsoft.Graph module. Your team’s scripts never call Get-MgUser directly; they only call Get-TRUser. When Microsoft inevitably rebrands “Entra” to “Microsoft Kosmos Identity” in 2027 and introduces a new Connect-KsIdentity cmdlet, you only have to update your internal TechResolve.Identity module in one place. You’ve insulated your entire automation fleet from the vendor’s churn.

Pro Tip: This approach is powerful but comes with its own overhead. You are now the owner and maintainer of an internal tool. You need to document it, version it, and teach your team how to use it. It’s a trade-off between control and convenience, but in a large enough organization, it’s often the right call.


Darian Vance

👉 Read the original article on TechResolve.blog


Support my work

If this article helped you, you can buy me a coffee:

👉 https://buymeacoffee.com/darianvance

Top comments (0)