
Microsoft tiene predilección por cambiar de nombres programas comerciales y también módulos. Los anteriores módulos AzureRM, Az, AzureAD, MSOnline… dejan pasado a Microsoft.Graph pero en los terminales se van acumulando y acaban dando problemas. Vamos a hacer limpieza de los que tengamos instalados y utilizar la API más moderna (por ahora)…
Lo primero es arrancar en propio PowerShell sin ningún perfil y como administrador, desde el clásico CMD por ejemplo, cualquier de estos dos atajos es correcto:
pwsh -NoProfile
powershell.exe -NoProfile
A continuación vamos a descarga de memoria, listar los posible módulos de usuario y máquina para desinstalar y eliminar carpetas (C:\Program Files\WindowsPowerShell\Modules):
# 1) Descarga módulos cargados en memoria (por si acaso)
Get-Module Az*,Azure*,MSOnline |
Remove-Module -Force
# 2) Rutas de módulos (PS5/PS7, usuario y máquina)
$paths = ($env:PSModulePath -split ';' | Where-Object { $_ -and (Test-Path $_) }) + @(
"$env:ProgramFiles\WindowsPowerShell\Modules",
"$env:ProgramFiles\PowerShell\Modules",
"$env:USERPROFILE\Documents\WindowsPowerShell\Modules",
"$env:USERPROFILE\Documents\PowerShell\Modules",
"${env:ProgramFiles(x86)}\WindowsPowerShell\Modules"
) | Select-Object -Unique
# 3) Localiza carpetas candidatas (Az.*, AzureRM.*, AzureAD, AzureADPreview, MSOnline)
# $regex = '^(Az(\.|$)|AzureRM(\.|$)|AzureAD(Preview)?$|MSOnline$)'
$regex = '^(Az($|\.))|(Azure($|\.))|(AzureRM($|\.))|(AzureAD(Preview)?$)|(MSOnline$)'
$candidates = foreach ($p in $paths) {
Get-ChildItem -Path $p -Directory |
Where-Object { $_.Name -match $regex }
}
# 4) Muestra lo que se va a borrar
$candidates | Select-Object FullName, Name
# 5) Elimina carpetas
$candidates | Remove-Item -Recurse -Force -WhatIf
# <- vuelve a ejecutar la misma línea SIN -WhatIf para borrar de verdad
# 6) Confirma que no queda nada
Get-Module -ListAvailable | Where-Object { $_.Name -match 'Az|Azure|AzureAD|MSOnline' }
Ya puedes instalar el último entorno disponible:
Install-Module Microsoft.Graph -Scope AllUsers -Force