(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
PowerShell

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.

Compartir: