Skip to content
Go back

Utilizadores Apenas em Cloud

Published:  at  10:00 AM

Utilizadores Apenas em Cloud vs. Sincronizados

Em ambientes de identidade híbrida, é comum ter dois tipos de utilizadores:

  1. Utilizadores sincronizados: criados no Active Directory local e sincronizados para o Entra ID
  2. Utilizadores apenas em cloud: criados diretamente no Entra ID sem contrapartida no AD local

Identificar os utilizadores apenas em cloud é essencial para:

Identificação via Microsoft Graph

Para identificar utilizadores apenas em cloud:

# Ligar ao Microsoft Graph
Connect-MgGraph -Scopes "User.Read.All", "Directory.Read.All"

# Obter todos os utilizadores
$users = Get-MgUser -All -Property DisplayName, UserPrincipalName, Mail, AccountEnabled, OnPremisesSyncEnabled, CreatedDateTime, UserType

# Filtrar utilizadores apenas em cloud (não sincronizados)
$cloudOnlyUsers = $users | Where-Object { 
    $_.OnPremisesSyncEnabled -ne $true -and 
    $_.UserType -eq "Member" 
}

# Apresentar utilizadores apenas em cloud
$cloudOnlyUsers | 
    Select-Object DisplayName, UserPrincipalName, Mail, AccountEnabled, CreatedDateTime |
    Sort-Object -Property DisplayName |
    Format-Table -AutoSize

Análise Detalhada de Utilizadores Apenas em Cloud

Para analisar mais detalhes sobre estes utilizadores:

# Adicionar informações sobre licenças e grupos
$cloudOnlyDetails = @()

foreach ($user in $cloudOnlyUsers) {
    # Obter licenças atribuídas
    $licenses = Get-MgUserLicenseDetail -UserId $user.Id
    $licenseNames = if ($licenses) { ($licenses.ServicePlans | Select-Object -ExpandProperty ServicePlanName -Unique) -join ", " } else { "Sem licença" }
    
    # Obter grupos a que o utilizador pertence
    $groups = Get-MgUserMemberOf -UserId $user.Id
    $groupCount = $groups.Count
    
    # Verificar se o utilizador é administrador
    $isAdmin = $false
    foreach ($membership in $groups) {
        if ($membership.AdditionalProperties.'@odata.type' -eq '#microsoft.graph.directoryRole') {
            $isAdmin = $true
            break
        }
    }
    
    # Obter última autenticação (se disponível)
    $signIns = $null
    try {
        $signIns = Get-MgUserSignInActivity -UserId $user.Id -ErrorAction SilentlyContinue
    } catch {
        # Ignorar erros - pode não ter permissão ou utilizador sem atividade
    }
    
    $lastSignIn = if ($signIns -and $signIns.LastSignInDateTime) { $signIns.LastSignInDateTime } else { "Desconhecido" }
    
    $cloudOnlyDetails += [PSCustomObject]@{
        DisplayName = $user.DisplayName
        UserPrincipalName = $user.UserPrincipalName
        Enabled = $user.AccountEnabled
        CreatedDate = $user.CreatedDateTime.ToString("yyyy-MM-dd")
        DaysActive = [math]::Round(((Get-Date) - $user.CreatedDateTime).TotalDays)
        IsAdmin = $isAdmin
        GroupCount = $groupCount
        LicenseStatus = if ($licenses) { "Licenciado" } else { "Sem licença" }
        LastSignIn = $lastSignIn
    }
}

# Apresentar detalhes
$cloudOnlyDetails | Format-Table DisplayName, UserPrincipalName, Enabled, CreatedDate, DaysActive, IsAdmin, GroupCount, LicenseStatus -AutoSize

Relatório de Resumo

Para gerar um relatório resumido sobre utilizadores apenas em cloud:

$totalUsers = $users.Count
$cloudOnlyCount = $cloudOnlyUsers.Count
$percentCloudOnly = [math]::Round(($cloudOnlyCount / $totalUsers) * 100, 2)

$enabledCount = ($cloudOnlyUsers | Where-Object { $_.AccountEnabled }).Count
$disabledCount = $cloudOnlyCount - $enabledCount

$adminCount = ($cloudOnlyDetails | Where-Object { $_.IsAdmin }).Count
$licensedCount = ($cloudOnlyDetails | Where-Object { $_.LicenseStatus -eq "Licenciado" }).Count

# Agrupar por antiguidade
$recentUsers = ($cloudOnlyDetails | Where-Object { $_.DaysActive -le 90 }).Count
$oldUsers = ($cloudOnlyDetails | Where-Object { $_.DaysActive -gt 365 }).Count

Write-Output "=== Relatório de Utilizadores Apenas em Cloud ==="
Write-Output "Total de Utilizadores no Entra ID: $totalUsers"
Write-Output "Utilizadores Apenas em Cloud: $cloudOnlyCount ($percentCloudOnly%)"
Write-Output ""
Write-Output "Estado das Contas:"
Write-Output "- Contas Ativas: $enabledCount"
Write-Output "- Contas Desativadas: $disabledCount"
Write-Output ""
Write-Output "Outros Indicadores:"
Write-Output "- Utilizadores com Privilégios Administrativos: $adminCount"
Write-Output "- Utilizadores com Licenças Atribuídas: $licensedCount"
Write-Output "- Contas Criadas nos Últimos 90 Dias: $recentUsers"
Write-Output "- Contas com Mais de 1 Ano: $oldUsers"

Considerações de Gestão

Para exportar a lista de utilizadores apenas em cloud para análise posterior:

# Exportar para CSV
$cloudOnlyDetails | Export-Csv -Path "CloudOnlyUsers.csv" -NoTypeInformation
Write-Output "Lista exportada para CloudOnlyUsers.csv"

Melhores Práticas


Suggest Changes

Previous Post
Utilizadores com Passkeys
Next Post
Autenticação Sem Palavra-passe