Gerir contas de convidados usando o Microsoft Entra PowerShell

Contas de convidados no Microsoft Entra ID permitem que utilizadores externos acedam a recursos específicos como ficheiros, equipas ou sites, sem serem membros plenos da sua organização. Estas contas são normalmente usadas para colaboração com parceiros, contratados ou clientes que necessitem de acesso temporário aos recursos da sua organização.

Gerir eficazmente as contas de convidados é crucial para manter a segurança e integridade dos dados da sua organização. Como administrador, é necessário garantir que as contas de convidados só recebem as permissões e o acesso necessários para desempenhar as suas tarefas pretendidas. Rever e auditar regularmente estas contas também é importante para identificar quaisquer contas inativas ou expiradas que devam ser removidas. Este exercício não só ajuda a reduzir potenciais riscos de segurança, como também garante uma utilização eficiente dos recursos da sua organização. Ao gerir bem as contas de convidados, pode proporcionar um ambiente seguro e produtivo para colaboração externa.

Pré-requisitos

Para gerir utilizadores convidados com o Microsoft Entra PowerShell, precisa de:

Convidar contas de utilizadores convidados

Pode convidar utilizadores convidados para a sua organização usando o Microsoft Entra PowerShell. Este processo permite que utilizadores externos acedam a recursos específicos da sua organização sem serem membros efetivos. Pode convidar um único utilizador convidado ou convidar em massa vários utilizadores convidados ao mesmo tempo.

Convide uma única conta de utilizador convidado

Para convidar um único utilizador externo para a sua organização com, pelo menos, a função de Guest Inviter.

# Connect to Microsoft Entra
Connect-Entra -Scopes 'User.Invite.All'

#Invite the guest user
New-EntraInvitation `
    -InvitedUserEmailAddress 'guestUser@contoso.com' `
    -InviteRedirectUrl 'https://contoso.com' `
    -SendInvitationMessage $true `
    -InvitedUserDisplayName 'Guest User'

Este script envia um convite a um utilizador convidado com o endereço guestUser@contoso.comde email, direcionando-o para https://contoso.com quando aceite. O resultado seguinte mostra os detalhes do utilizador convidado.

Id                                   InviteRedeemUrl
--                                   ---------------                                           
aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb https://login.microsoftonline.com/redeem?rd=https%3a%2f%2finvitation…

Contas de utilizadores convidados em massa

Para convidar em massa utilizadores convidados para a sua organização:

  1. Preparar o ficheiro CSV

    No Microsoft Excel, crie um ficheiro CSV com a lista de nomes de utilizador e endereços de email dos convidados. Certifique-se de incluir os títulos das colunas Nome e Email .

    Por exemplo, crie uma folha de cálculo no seguinte formato:

    Nome Email
    Reed Smith rsmith@contoso.com
    Hayden Cook hcook@fabricam.com
    Isabel Garcia igarcia@contoso.com

Guarda o ficheiro como C:\BulkInvite\Invitations.csv ou em qualquer local que escolheres.

Se não tiver Excel, pode criar um ficheiro CSV em qualquer editor de texto, como o Notepad. Separe cada valor por uma vírgula e cada linha por uma nova linha.

Ligue-se ao Microsoft Entra com, pelo menos, a função Convidador de Convidados.

Connect-Entra -Scopes 'User.Invite.All'

# Import the CSV file containing the invitations.
$invitations = Import-Csv -Path "c:\bulkinvite\invitations.csv"

# Define the message to be sent to the invited users.
$messageBody = "Hello. You are invited to the Contoso organization."

# Iterate over each invitation in the CSV file.
foreach ($invitation in $invitations) {
    # Define the invitation parameters
    $invitationParams = @{
        InvitedUserEmailAddress = $invitation.Email  # Ensure this matches your CSV column name
        InviteRedirectUrl       = "https://contoso.com"
        SendInvitationMessage   = $true
        InvitedUserMessageInfo  = @{
            CustomizedMessageBody = $messageBody
        }
    }

    # Create a new invitation using the defined parameters
    New-EntraInvitation @invitationParams
}

Este script importa uma lista de convites a partir de um ficheiro CSV. Define uma mensagem personalizada para os utilizadores convidados e, em seguida, percorre cada convite para enviar um convite a cada utilizador, utilizando o respetivo endereço de e-mail.

O resultado seguinte mostra os detalhes dos utilizadores convidados.

Id                                   InviteRedeemUrl
--                                   ---------------                                                      
aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb https://login.microsoftonline.com/redeem?rd=https%3a%2f%2finvitation…
bbbbbbbb-1111-2222-3333-cccccccccccc https://login.microsoftonline.com/redeem?rd=https%3a%2f%2finvitation…

Ver e exportar contas de utilizadores convidados

Para visualizar e exportar utilizadores convidados:

Ligue-se ao Microsoft Entra com, pelo menos, a função Convidador de Convidados.

Connect-Entra -Scopes 'User.Read.All'
 

# Retrieve all guest user accounts.
Get-EntraUser -Filter "userType eq 'Guest'" -All -Property "displayName", "mail", "createdDateTime", "AccountEnabled" | Select-Object "displayName", "mail", "createdDateTime", "AccountEnabled"

O script recupera todas as contas de utilizador convidados do Microsoft Entra ID com os seus nomes de visualização, endereços de email e datas de criação, e depois mostra a lista desses utilizadores convidados.

DisplayName   Id   Mail                               createdDateTime      AccountEnabled
-----------   --   ----                               ---------------      --------------
externaluser1      externaluser1@externaldomain1.com  13/09/2024 18:37:33  True
externaluser2      externaluser2@externaldomain2.com  15/02/2024 15:05:31  True

Gerir o patrocínio de utilizadores convidados

No Microsoft Entra ID, o patrocínio de convidados permite-lhe designar utilizadores ou grupos específicos como patrocinadores para utilizadores convidados, dando-lhes a capacidade de gerir o acesso e as permissões do utilizador convidado. Esta funcionalidade é útil para organizações que pretendem controlar e monitorizar o acesso de utilizadores externos.

Para gerir o patrocínio de utilizadores convidados, pode atribuir, visualizar e remover um patrocinador de um utilizador convidado. É necessário pelo menos um papel de Administrador de Utilizadores para realizar estas ações.

Atribuir um patrocinador a um utilizador convidado

O exemplo seguinte mostra como atribuir um patrocinador a um utilizador convidado no Microsoft Entra ID. Podes usar o New-EntraUserSponsor cmdlet para atribuir um patrocinador a um utilizador convidado especificado.

Connect-Entra -Scopes 'User.ReadWrite.All'

$sponsor = Get-EntraUser -UserId 'SponsorEmail@contoso.com'
Set-EntraUserSponsor -UserId 'guestuser@contoso.com' -Type User -SponsorIds $sponsor.Id

Este exemplo atribui um patrocinador a um utilizador convidado no Microsoft Entra ID. O UserId parâmetro especifica o utilizador convidado, e o SponsorId parâmetro indica o patrocinador.

Ver os patrocinadores de um utilizador convidado

O exemplo seguinte mostra como visualizar os patrocinadores de um utilizador convidado no Microsoft Entra ID. Pode usar o Get-EntraUserSponsor cmdlet para recuperar os patrocinadores de um utilizador convidado específico.

Connect-Entra -Scopes 'User.Read.All'

Get-EntraUserSponsor -UserId 'guestuser@contoso.com' -All | Select-Object Id, DisplayName, '@odata.type', CreatedDateTime | Format-Table -AutoSize

Este exemplo recupera os patrocinadores de um utilizador convidado no Microsoft Entra ID. O UserId parâmetro especifica o utilizador convidado.

id                                   displayName          @odata.type           createdDateTime
--                                   -----------      -----------           ---------------
aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb GuestUser Sponsor 1  #microsoft.graph.user 5/6/2025 11:29:26 PM
bbbbbbbb-1111-2222-3333-bbbbbbbbbbbb GuestUser Sponsor 2  #microsoft.graph.user 5/6/2025 11:29:27 PM

Remover um patrocinador de um utilizador convidado

O exemplo seguinte mostra como remover um patrocinador de um utilizador convidado no Microsoft Entra ID. Pode usar o Remove-EntraUserSponsor cmdlet para remover um patrocinador de um utilizador convidado específico.

Connect-Entra -Scopes 'User.ReadWrite.All'

$sponsor = Get-EntraUserSponsor -UserId 'SawyerM@contoso.com' | Where-Object { $_.displayName -eq 'Adele Vance (Fabrikam)' }
Remove-EntraUserSponsor -UserId 'SawyerM@Contoso.com' -SponsorId $sponsor.Id

Este exemplo remove um patrocinador de um utilizador convidado no Microsoft Entra ID. O UserId parâmetro especifica o utilizador convidado, e o SponsorId parâmetro especifica o patrocinador a ser removido.

Redefinir o estado do resgate do utilizador convidado

No Microsoft Entra ID, é necessário redefinir o estado de resgate de um utilizador convidado quando pretende permitir que volte a resgatar o convite. Esta funcionalidade é útil se o utilizador não completar o processo de resgate ou se o seu estado precisar de ser reiniciado por qualquer motivo. O exemplo seguinte demonstra como redefinir o estado de resgate de um utilizador convidado enviando-lhe um novo convite.

Primeiro identifique o utilizador convidado e envie um novo convite: Isto redefine o estado do resgate ao convidar novamente o utilizador convidado.

Connect-Entra -Scopes 'User.Invite.All'

$user = Get-EntraUser -Filter "startsWith(mail, 'johndoe@gmail.com')"
New-EntraInvitation `
    -InvitedUserEmailAddress $user.Mail `
    -InviteRedirectUrl "https://myapps.contoso.com" `
    -ResetRedemption `
    -SendInvitationMessage `
    -InvitedUser $user

Desativar contas de utilizador convidado

Os exemplos seguintes mostram como desativar contas de utilizador convidado no Microsoft Entra ID. Podes desativar uma única conta de convidado ou desativar todas as contas de convidado conforme as tuas necessidades.

Desative uma única conta de utilizador convidado

Para desativar uma única conta de utilizador convidado:

Ligue-se à Microsoft Entra com pelo menos uma função de Administrador de Utilizadores:

Connect-Entra -Scopes 'User.ReadWrite.All'
  
# Disable the guest user account.
Get-EntraUser -Filter "userType eq 'Guest' and mail eq 'guestUser@contoso.com'" | Set-EntraUser -AccountEnabled $false

Desativar todas as contas de utilizadores convidados

Execute o seguinte cmdlet para desativar todas as contas de utilizadores convidados.

Connect-Entra -Scopes 'User.ReadWrite.All'

# Disable the guest user account
Get-EntraUser | Where-Object { $_.UserType -eq 'Guest' } | Set-EntraUser -AccountEnabled $false

Ver e exportar contas de utilizador convidado expiradas

Para visualizar e exportar contas de utilizador convidado expiradas:

  1. Expanda o exemplo anterior para recuperar utilizadores convidados e verifique cada um para expiração. Neste exemplo, assumimos que as contas de convidados expiram 90 dias após a criação.

    $report = @() 
    $now = Get-Date  
    # Retrieve all guest users.
    $guestUsers = Get-EntraUser -Filter "userType eq 'Guest'" -All
    
    foreach ($guest in $guestUsers) {
        # Calculate the expiration date based on the creation date
        $guestExpirationDate = $guest.CreatedDateTime.AddDays(90)
    
        # Check if the account is expired
        if ($guestExpirationDate -lt $now) {
            # Add expired guest account details to the report
            $report += [PSCustomObject]@{
                Id          = $guest.Id
                Name        = $guest.DisplayName
                Mail        = $guest.Mail
                Expiration  = $guestExpirationDate
                CreatedDate = $guest.CreatedDateTime
            }
        }
    }
    
  2. Exporta o relatório para um ficheiro CSV.

       $report | Export-Csv -Path "ExpiredGuestAccounts.csv" -NoTypeInformation  
    

Remover contas de utilizador convidado expiradas

Ligue-se à Microsoft Entra com pelo menos uma função de Administrador de Utilizadores:

Neste exemplo, assumimos que as contas de convidados expiram 90 dias após a criação.

Note

Este script remove todos os utilizadores convidados cujas contas estão expiradas. Esta ação é irreversível e deve ser usada com cautela. Certifique-se sempre de que tem um plano de backup ou de recuperação antes de remover contas de utilizador.

Connect-Entra -Scopes "User.ReadWrite.All"

$age = (Get-Date).AddDays(-90).ToString("yyyy-MM-ddTHH:mm:ssZ") 
Get-EntraUser -Filter "userType eq 'Guest' and createdDateTime le $age" -All | Remove-EntraUser