MS-PS-001 - Extração Das Caixas Compartilhadas Por Powershell

ID: KB-MS-PS-001

Responsável: Thiago Amaral, TI

Status: Publicado

Última Atualização: 15/04/2025


Propósito

Fornecer ao time de Suporte TI Nível 1 scripts PowerShell para automatizar a extração de relatórios detalhados sobre as permissões de caixas de correio compartilhadas e as licenças de usuários dos tenants da Holding e da FCT Consig.

Aplica-se a

  • Time de Suporte TI Nível 1 da FCT Consig.

  • Administração do Microsoft 365 (Exchange Online e Microsoft Graph).

Pré-requisitos

  • Windows PowerShell.

  • Permissões de administrador no Microsoft 365 para se conectar ao Exchange Online e ao Microsoft Graph.

  • Os módulos ExchangeOnlineManagement e Microsoft.Graph.Users do PowerShell instalados, conforme o primeiro passo abaixo.


Instruções

O procedimento é dividido em três scripts principais: um para permissões de caixas de correio compartilhadas da Holding, um para usuários e licenças da Holding, e um para usuários e licenças da FCT Consig.

1. Instalação dos Módulos PowerShell

Antes de executar os scripts, você precisa instalar os módulos necessários. Execute estes comandos em um PowerShell iniciado como administrador, escolhendo "Sim para todos" (Y e depois A) quando solicitado.

  • Instalar o módulo do Exchange Online:

    Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser
  • Instalar o módulo do Microsoft Graph Users:

    Install-Module Microsoft.Graph.Users -Scope CurrentUser -AllowClobber -Force

2. Script 1: Extrair Permissões de Caixas de Correio Compartilhadas (Holding)

Este script gera um arquivo CSV com todas as permissões (Full Access, Send As, Send on Behalf) das caixas de correio compartilhadas dos domínios da Holding.

  1. Crie um arquivo chamado ExtractionSharedHolding.ps1.

  2. Cole o seguinte código no arquivo:

    # Conectar ao Exchange Online
    Connect-ExchangeOnline -UserPrincipalName [email protected]
    
    # Domínios de interesse da Holding
    $dominios = @("fictorconsig", "mtxcard", "alvocard", "singularcard", "fctconsultoria")
    
    $resultado = @()
    $sharedMailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox
    
    foreach ($mailbox in $sharedMailboxes) {
        $email = $mailbox.PrimarySmtpAddress.ToString()
        if ($dominios -contains ($email.Split("@")[1].Split(".")[0])) {
            # Full Access
            $fullAccessPerms = Get-MailboxPermission -Identity $mailbox.Identity | Where-Object { $_.User -ne "NT AUTHORITY\SELF" -and $_.AccessRights -contains "FullAccess" } | Select-Object -ExpandProperty User
            # Send As
            $sendAsPerms = Get-RecipientPermission -Identity $mailbox.Identity | Where-Object { $_.Trustee -ne "NT AUTHORITY\SELF" -and $_.AccessRights -contains "SendAs" } | Select-Object -ExpandProperty Trustee
            # Send on Behalf
            $sendOnBehalfPerms = $mailbox.GrantSendOnBehalfTo | ForEach-Object { $_.Name }
    
            foreach ($user in $fullAccessPerms) { $resultado += [pscustomobject]@{ MailboxName = $mailbox.DisplayName; Email = $email; PermissionType = "Full Access"; AssignedTo = $user } }
            foreach ($user in $sendAsPerms) { $resultado += [pscustomobject]@{ MailboxName = $mailbox.DisplayName; Email = $email; PermissionType = "Send As"; AssignedTo = $user } }
            foreach ($user in $sendOnBehalfPerms) { $resultado += [pscustomobject]@{ MailboxName = $mailbox.DisplayName; Email = $email; PermissionType = "Send on Behalf"; AssignedTo = $user } }
        }
    }
    
    # Exportar para CSV
    $resultado | Export-Csv -Path "SharedMailboxPermissionsHolding.csv" -NoTypeInformation -Encoding UTF8
    Disconnect-ExchangeOnline -Confirm:$false

3. Execute o script em um PowerShell como administrador. Um arquivo SharedMailboxPermissionsHolding.csv será gerado na mesma pasta do script.

3. Script 2: Extrair Informações de Usuários e Licenças (Holding)

Este script gera um relatório de todos os usuários dos domínios da Holding, incluindo suas licenças atribuídas.

  1. Crie um arquivo chamado ExtractUserListHolding.ps1.

  2. Cole o seguinte código no arquivo:

3. Execute o script. Um arquivo UserAccountsInfoHolding.csv será gerado.

4. Script 3: Extrair Informações de Usuários e Licenças (FCT Consig)

Este script é uma variação do anterior, focado apenas no domínio da FCT Consig.

  1. Crie um arquivo chamado ExtractUserListConsig.ps1.

  2. Cole o seguinte código no arquivo (note a mudança na variável $dominiosDesejados e no nome do arquivo de saída):

    Import-Module Microsoft.Graph.Users
    Connect-MgGraph -Scopes "User.Read.All", "Directory.Read.All"
    $skuMap = @{ "c42b9cae-ea4f-4ab7-9717-81576235ccac" = "Microsoft 365 Business Standard"; "f245ecc8-75af-4f8e-b61f-27d8114de5f3" = "Microsoft 365 Business Basic"; "e2dd8681-bdbb-4b4c-a01d-11277a5c0aa2" = "Microsoft Teams Exploratory"; "19ec0d23-8335-4cbd-94ac-6050e30712fa" = "Exchange Online (Plan 1)" }
    $dominiosDesejados = @("fctconsig") # <-- ÚNICO DOMÍNIO
    $usuarios = Get-MgUser -All -Property DisplayName,GivenName,Surname,JobTitle,Department,UserPrincipalName,AssignedLicenses
    $resultado = @()
    foreach ($user in $usuarios) {
        $email = $user.UserPrincipalName
        $dominio = $email.Split("@")[1]
        if ($dominiosDesejados -contains ($dominio.Split(".")[0])) {
            $licencas = $user.AssignedLicenses | ForEach-Object { $skuMap[$_.SkuId.ToString()] }
            if ($licencas.Count -eq 0) { $licencasTexto = "Sem licença" } else { $licencasTexto = ($licencas | Where-Object { $_ }) -join "; " }
            $resultado += [pscustomobject]@{ FirstName = $user.GivenName; LastName = $user.Surname; DisplayName = $user.DisplayName; Title = $user.JobTitle; Department = $user.Department; Email = $email; Licenses = $licencasTexto }
        }
    }
    $csvPath = "$PSScriptRoot\UserAccountsInfoConsig.csv" # <-- NOME DO ARQUIVO DIFERENTE
    $resultado | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
    Disconnect-MgGraph

3. Execute o script. Um arquivo UserAccountsInfoConsig.csv será gerado.


Resultado Esperado

A execução dos scripts gerará arquivos CSV (.csv) no mesmo diretório de cada script, contendo relatórios detalhados das permissões das caixas de correio compartilhadas e das informações de licença dos usuários para os domínios especificados.

Solução de Problemas

  • Problema/Erro: Erro de autenticação ao executar Connect-ExchangeOnline ou Connect-MgGraph. * Solução: Certifique-se de que você está executando o PowerShell com a conta de usuário correta e que ela possui as permissões necessárias (como Administrador do Exchange ou Administrador Global) no tenant do Microsoft 365. Na primeira vez que se conectar ao Microsoft Graph, você precisará consentir com as permissões solicitadas na janela de login.

Artigos Relacionados

  • Não se aplica.

Anexos

  • Não se aplica.

Referências

  • Como obter os IDs das SKUs de licença: Para atualizar a lista $skuMap nos scripts de usuário, você pode obter uma lista de todas as licenças do seu tenant com os seguintes comandos:

    # Conecte-se ao Microsoft Graph primeiro
    Connect-MgGraph -Scopes "User.Read.All", "Directory.Read.All"
    # Execute o comando para listar as SKUs
    Get-MgSubscribedSku | Select-Object SkuId, SkuPartNumber

Histórico de Revisões

Data
Versão
Responsável
Mudança

15/04/2025

v1.0

Thiago Thalisson

Confecção do documento.

Last updated