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

Gestão de Microsoft 365 com PowerShell: utilizadores, grupos e licenças

João Barros 28 de February de 2025 1 min de leitura

Gerir o Microsoft 365 via portal é ineficiente para mais de 50 utilizadores. O PowerShell com Microsoft Graph permite automação completa: onboarding, licenças, grupos, Teams e auditoria de segurança.

Autenticar com Microsoft Graph

Install-Module Microsoft.Graph -Scope CurrentUser

# Login interactivo com scopes necessários
Connect-MgGraph -Scopes "User.ReadWrite.All","Group.ReadWrite.All","Directory.ReadWrite.All"

# Service Principal para automação
Connect-MgGraph -ClientId $env:APP_ID -TenantId $env:TENANT_ID -ClientSecretCredential $cred

Criar utilizadores em massa a partir de CSV

$utilizadores = Import-Csv "novos_utilizadores.csv" -Encoding UTF8
# CSV: DisplayName,UPN,Department,JobTitle,Manager

foreach ($u in $utilizadores) {
    $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 "Criado: $($u.UPN)"
}

Atribuir licenças

# Ver SKUs disponíveis
Get-MgSubscribedSku | Select-Object SkuPartNumber, ConsumedUnits, PrepaidUnits

# Atribuir licença M365 Business Premium a utilizador
$skuId = (Get-MgSubscribedSku | Where-Object { $_.SkuPartNumber -eq "SPB" }).SkuId
Set-MgUserLicense -UserId "utilizador@empresa.pt" `
    -AddLicenses @(@{ SkuId = $skuId }) `
    -RemoveLicenses @()

Relatório de licenças não utilizadas

# Utilizadores com licença mas sem login nos últimos 90 dias
$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 "licencas_inativas.csv" -NoTypeInformation

Conclusão

O Microsoft Graph PowerShell substitui o antigo MSOL e AzureAD, que chegaram ao fim de vida. Para gestão M365 em escala — onboardings, auditorias de segurança, relatórios de licenças — PowerShell + MgGraph é a combinação mais eficiente disponível.

Partilhar: