Gestión de Microsoft 365 con PowerShell: usuarios, grupos y licencias
João Barros
28 de February de 2025
1 min de lectura
Gestionar Microsoft 365 vía el portal es ineficiente para más de 50 usuarios. PowerShell con Microsoft Graph permite una automatización completa: onboarding, licencias, grupos, Teams y auditoría de seguridad.
Autenticar con Microsoft Graph
Install-Module Microsoft.Graph -Scope CurrentUser
# Login interactivo con los scopes necesarios
Connect-MgGraph -Scopes "User.ReadWrite.All","Group.ReadWrite.All","Directory.ReadWrite.All"
# Service Principal para automatización
Connect-MgGraph -ClientId $env:APP_ID -TenantId $env:TENANT_ID -ClientSecretCredential $cred
Crear usuarios en masa desde un CSV
$usuarios = Import-Csv "nuevos_usuarios.csv" -Encoding UTF8
# CSV: DisplayName,UPN,Department,JobTitle,Manager
foreach ($u in $usuarios) {
$pwd = ConvertTo-SecureString (New-Guid).ToString() -AsPlainText -Force
$params = @{
DisplayName = $u.DisplayName
UserPrincipalName = $u.UPN
PasswordProfile = @{ Password = (New-Guid).ToString(); ForceChangePasswordNextSignIn = $true }
AccountEnabled = $true
Department = $u.Department
JobTitle = $u.JobTitle
}
New-MgUser @params
Write-Output "Creado: $($u.UPN)"
}
Asignar licencias
# Ver los SKUs disponibles
Get-MgSubscribedSku | Select-Object SkuPartNumber, ConsumedUnits, PrepaidUnits
# Asignar una licencia M365 Business Premium a un usuario
$skuId = (Get-MgSubscribedSku | Where-Object { $_.SkuPartNumber -eq "SPB" }).SkuId
Set-MgUserLicense -UserId "usuario@empresa.com" `
-AddLicenses @(@{ SkuId = $skuId }) `
-RemoveLicenses @()
Informe de licencias sin usar
# Usuarios con licencia pero sin inicio de sesión en los últimos 90 días
$cutoff = (Get-Date).AddDays(-90)
Get-MgUser -Filter "assignedLicenses/$count ne 0" -All |
Where-Object { $_.SignInActivity.LastSignInDateTime -lt $cutoff -or $_.SignInActivity -eq $null } |
Select-Object DisplayName, UserPrincipalName, SignInActivity |
Export-Csv "licencias_inactivas.csv" -NoTypeInformation
Conclusión
Microsoft Graph PowerShell sustituye los antiguos módulos MSOL y AzureAD, que llegaron al fin de su vida. Para la gestión de M365 a escala — onboardings, auditorías de seguridad, informes de licencias — PowerShell + MgGraph es la combinación más eficiente disponible.