Administración de cuentas de invitado mediante Microsoft Entra PowerShell

Las cuentas de invitado de Microsoft Entra ID permiten a los usuarios externos acceder a recursos específicos, como archivos, equipos o sitios sin ser miembros completos de su organización. Estas cuentas se suelen usar para la colaboración con asociados, contratistas o clientes que necesitan acceso temporal a los recursos de la organización.

La administración eficaz de cuentas de invitado es fundamental para mantener la seguridad e integridad de los datos de la organización. Como administrador, debe asegurarse de que las cuentas de invitado solo tienen los permisos necesarios y el acceso para realizar sus tareas deseadas. Revisar y auditar periódicamente estas cuentas también es importante identificar las cuentas inactivas o expiradas que se deben quitar. Este ejercicio no solo ayuda a reducir los posibles riesgos de seguridad, sino que también garantiza un uso eficaz de los recursos de la organización. Al administrar bien las cuentas de invitado, puede proporcionar un entorno seguro y productivo para la colaboración externa.

Prerrequisitos

Para administrar usuarios invitados con Microsoft Entra PowerShell, necesita lo siguiente:

Invitar cuentas de invitado

Puede invitar a usuarios invitados a su organización mediante Microsoft Entra PowerShell. Este proceso permite a los usuarios externos acceder a recursos específicos de su organización sin ser miembros completos. Puede invitar a un solo usuario invitado o invitar de forma masiva a varios usuarios invitados a la vez.

Invitar a una sola cuenta de usuario invitado

Para invitar a un único usuario invitado a su organización con al menos el rol de Invitador de invitados.

# 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 envía una invitación a un usuario invitado con la dirección guestUser@contoso.comde correo electrónico , que los dirige a https://contoso.com tras la aceptación. La siguiente salida muestra los detalles del usuario invitado.

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

Invitar en bloque a cuentas de usuario invitado

Para invitar de forma masiva a los usuarios invitados a su organización:

  1. Preparación del archivo .csv

    En Microsoft Excel, cree un archivo CSV con la lista de nombres de usuario invitados y direcciones de correo electrónico. Asegúrese de incluir los encabezados de columna Nombre y Correo electrónico .

    Por ejemplo, cree una hoja de cálculo con el formato siguiente:

    Nombre Correo electrónico
    Reed Smith rsmith@contoso.com
    Hayden Cook hcook@fabricam.com
    Isabel Garcia igarcia@contoso.com

Guarde el archivo como C:\BulkInvite\Invitations.csv o cualquier ubicación de su elección.

Si no tiene Excel, puede crear un archivo CSV en cualquier editor de texto, como el Bloc de notas. Separe cada valor con una coma y cada fila con una línea nueva.

Conéctese a Microsoft Entra con al menos el rol de Invitador de invitados.

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 una lista de invitaciones de un archivo CSV. Define un mensaje personalizado para los usuarios invitados y, a continuación, recorre en iteración cada invitación para enviar una invitación a cada usuario con su dirección de correo electrónico.

La siguiente salida muestra los detalles de los usuarios invitados.

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…

Visualización y exportación de cuentas de usuario invitado

Para ver y exportar usuarios invitados:

Conéctese a Microsoft Entra con al menos el rol Guest Inviter.

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"

El script recupera todas las cuentas de usuario invitado de Microsoft Entra ID con sus nombres para mostrar, direcciones de correo electrónico y fechas de creación y, a continuación, muestra la lista de esos usuarios invitados.

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

Administración del patrocinio de usuarios invitados

En Microsoft Entra ID, el patrocinio de invitados le permite designar usuarios o grupos específicos como patrocinadores para los usuarios invitados, lo que les permite administrar el acceso y los permisos del usuario invitado. Esta característica es útil para las organizaciones que desean controlar y supervisar el acceso de los usuarios externos.

Para administrar el patrocinio de usuarios invitados, puede asignar, ver y quitar un patrocinador de un usuario invitado. Necesita al menos un rol administrador de usuarios para realizar estas acciones.

Asignar un patrocinador a un usuario invitado

En el ejemplo siguiente se muestra cómo asignar un patrocinador a un usuario invitado en Microsoft Entra ID. Puede usar el New-EntraUserSponsor cmdlet para asignar un patrocinador a un usuario invitado 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

En este ejemplo se asigna un patrocinador a un usuario invitado en Microsoft Entra ID. El UserId parámetro especifica el usuario invitado y el SponsorId parámetro especifica el patrocinador.

Ver los patrocinadores de un usuario invitado

En el ejemplo siguiente se muestra cómo ver los patrocinadores de un usuario invitado en Microsoft Entra ID. Puede usar el Get-EntraUserSponsor cmdlet para recuperar los patrocinadores de un usuario invitado especificado.

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

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

En este ejemplo se recuperan los patrocinadores de un usuario invitado en Microsoft Entra ID. El UserId parámetro especifica el usuario invitado.

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

Quitar un patrocinador de un usuario invitado

En el ejemplo siguiente se muestra cómo quitar un patrocinador de un usuario invitado en Microsoft Entra ID. Puede usar el Remove-EntraUserSponsor cmdlet para quitar un patrocinador de un usuario invitado especificado.

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

En este ejemplo se elimina un patrocinador de un usuario invitado en Microsoft Entra ID. El UserId parámetro especifica el usuario invitado y el SponsorId parámetro especifica el patrocinador que se va a quitar.

Restablecer el estado de canje del usuario invitado

En Microsoft Entra ID, restablecer el estado de canje de un usuario invitado es necesario cuando desea permitir que el usuario canjee su invitación de nuevo. Esta característica es útil si el usuario no completa el proceso de canje o si su estado debe restablecerse por cualquier motivo. En el ejemplo siguiente se muestra cómo restablecer el estado de canje para un usuario invitado mediante el envío de una nueva invitación.

En primer lugar, identifique al usuario invitado y envíe una nueva invitación: restablece el estado de canje invitando al usuario invitado de nuevo.

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

Deshabilitar cuentas de usuario invitado

En los ejemplos siguientes se muestra cómo deshabilitar las cuentas de usuario invitado en Microsoft Entra ID. Puede deshabilitar una sola cuenta de invitado o deshabilitar todas las cuentas de invitado en función de sus requisitos.

Deshabilitar una sola cuenta de usuario invitado

Para deshabilitar una sola cuenta de usuario invitado:

Conéctese a Microsoft Entra con al menos un rol administrador de usuarios:

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

Deshabilitar todas las cuentas de usuario invitado

Ejecute el siguiente cmdlet para deshabilitar todas las cuentas de usuario invitado.

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

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

Visualización y exportación de cuentas de usuario invitado expiradas

Para ver y exportar cuentas de usuario invitado expiradas:

  1. Expanda el ejemplo anterior para recuperar usuarios invitados y comprobar cada uno para la expiración. En este ejemplo, se supone que las cuentas de invitado expiran 90 días después de la creación.

    $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. Exporte el informe a un archivo CSV.

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

Eliminación de cuentas de usuario invitado expiradas

Conéctese a Microsoft Entra con al menos un rol administrador de usuarios:

En este ejemplo, se supone que las cuentas de invitado expiran 90 días después de la creación.

Note

Este script quita todos los usuarios invitados cuyas cuentas han expirado. Esta acción es irreversible y debe usarse con precaución. Asegúrese siempre de tener una copia de seguridad o un plan de recuperación en su lugar antes de quitar cuentas de usuario.

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