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.