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
ExchangeOnlineManagementeMicrosoft.Graph.Usersdo 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 CurrentUserInstalar 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.
Crie um arquivo chamado
ExtractionSharedHolding.ps1.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.
Crie um arquivo chamado
ExtractUserListHolding.ps1.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.
Crie um arquivo chamado
ExtractUserListConsig.ps1.Cole o seguinte código no arquivo (note a mudança na variável
$dominiosDesejadose 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-ExchangeOnlineouConnect-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
$skuMapnos 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
15/04/2025
v1.0
Thiago Thalisson
Confecção do documento.
Last updated