Zarządzanie kontami gości przy użyciu programu Microsoft Entra PowerShell

Konta gości w Microsoft Entra ID umożliwiają użytkownikom zewnętrznym dostęp do określonych zasobów, takich jak pliki, zespoły lub witryny, bez stawania się pełnoprawnymi członkami Twojej organizacji. Te konta są zwykle używane do współpracy z partnerami, wykonawcami lub klientami, którzy potrzebują tymczasowego dostępu do zasobów organizacji.

Efektywne zarządzanie kontami gościa ma kluczowe znaczenie dla utrzymania bezpieczeństwa i integralności danych organizacji. Jako administrator musisz mieć pewność, że konta gościa mają tylko niezbędne uprawnienia i dostęp do wykonywania ich zamierzonych zadań. Regularne przeglądanie i inspekcja tych kont jest również ważne, aby zidentyfikować wszystkie nieaktywne lub wygasłe konta, które powinny zostać usunięte. To ćwiczenie nie tylko pomaga zmniejszyć potencjalne zagrożenia bezpieczeństwa, ale także zapewnić efektywne wykorzystanie zasobów organizacji. Dobrze zarządzając kontami gości, można zapewnić bezpieczne i wydajne środowisko do współpracy zewnętrznej.

Prerequisites

Aby zarządzać użytkownikami-gośćmi za pomocą programu Microsoft Entra PowerShell, potrzebne są następujące elementy:

Zapraszanie kont użytkowników-gości

Możesz zaprosić użytkowników-gości do organizacji przy użyciu programu Microsoft Entra PowerShell. Ten proces umożliwia użytkownikom zewnętrznym dostęp do określonych zasobów w organizacji bez bycia pełnymi członkami. Możesz zaprosić jednego użytkownika-gościa lub zaprosić zbiorczo wielu użytkowników-gości jednocześnie.

Zapraszanie pojedynczego konta użytkownika-gościa

Aby zaprosić jednego użytkownika-gościa do organizacji, mając co najmniej rolę Zapraszający gości.

# 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'

Ten skrypt wysyła zaproszenie do użytkownika-gościa z adresem guestUser@contoso.come-mail, kierując je do https://contoso.com użytkownika po zaakceptowaniu. W poniższych danych wyjściowych przedstawiono szczegóły zaproszonego użytkownika-gościa.

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

Zbiorcze zapraszanie kont użytkowników-gości

Aby zbiorczo zaprosić użytkowników-gości do organizacji:

  1. Przygotowywanie pliku CSV

    W programie Microsoft Excel utwórz plik CSV z listą nazw użytkowników zapraszanych oraz adresów e-mail. Pamiętaj, aby uwzględnić nagłówki kolumn Name (Nazwa ) i Email (Adres e-mail ).

    Na przykład utwórz arkusz w następującym formacie:

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

Zapisz plik jako C:\BulkInvite\Invitations.csv lub dowolną wybraną lokalizację.

Jeśli nie masz Excel, możesz utworzyć plik CSV w dowolnym edytorze tekstów, takim jak Notatnik. Oddziel wartości przecinkami, a wiersze nową linią.

Połącz się z Microsoft Entra, mając co najmniej rolę Zapraszający gości.

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
}

Ten skrypt importuje listę zaproszeń z pliku CSV. Definiuje niestandardowy komunikat dla zaproszonych użytkowników, a następnie przechodzi przez każde zaproszenie, aby wysłać je do każdego użytkownika na jego adres e-mail.

W poniższych danych wyjściowych przedstawiono szczegóły zaproszonych użytkowników-gości.

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…

Wyświetlanie i eksportowanie kont użytkowników-gości

Aby wyświetlić i wyeksportować użytkowników-gości:

Połącz się z platformą Microsoft Entra, mając co najmniej rolę zapraszającego gości.

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"

Skrypt pobiera wszystkie konta użytkowników-gości z Microsoft Entra ID z ich nazwami wyświetlanymi, adresami e-mail i datami tworzenia, a następnie wyświetla listę tych użytkowników-gości.

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

Zarządzanie dostępem sponsorowanym użytkownika-gościa

W Microsoft Entra ID dostęp sponsorowany gościa umożliwia wyznaczenie określonych użytkowników lub grup jako sponsorów dla użytkowników-gości, co daje im możliwość zarządzania dostępem i uprawnieniami użytkownika-gościa. Ta funkcja jest przydatna w przypadku organizacji, które chcą kontrolować i monitorować dostęp użytkowników zewnętrznych.

Aby zarządzać sponsorowaniem użytkownika-gościa, możesz przypisać, wyświetlić i usunąć sponsora użytkownika-gościa. Do wykonania tych akcji potrzebna jest co najmniej rola administratorów użytkowników .

Przypisywanie sponsora do użytkownika-gościa

W poniższym przykładzie pokazano, jak przypisać sponsora do użytkownika-gościa w Microsoft Entra ID. Możesz użyć New-EntraUserSponsor polecenia cmdlet , aby przypisać sponsora do określonego użytkownika-gościa.

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

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

W tym przykładzie sponsor jest przypisywany do użytkownika-gościa w Microsoft Entra ID. Parametr UserId określa użytkownika-gościa, a SponsorId parametr określa sponsora.

Wyświetlanie sponsorów użytkownika-gościa

W poniższym przykładzie pokazano, jak wyświetlić sponsorów użytkownika-gościa w Microsoft Entra ID. Możesz użyć polecenia cmdlet Get-EntraUserSponsor, aby pobrać sponsorów określonego użytkownika-gościa.

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

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

Ten przykład pobiera sponsorów użytkownika-gościa w Microsoft Entra ID. Parametr UserId określa użytkownika-gościa.

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

Usuwanie sponsora od użytkownika-gościa

W poniższym przykładzie pokazano, jak usunąć sponsora od użytkownika-gościa w Microsoft Entra ID. Możesz użyć polecenia cmdlet Remove-EntraUserSponsor, aby usunąć sponsora dla określonego użytkownika-gościa.

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

Ten przykład usuwa sponsora użytkownikowi gościnnemu w Microsoft Entra ID. Parametr UserId określa użytkownika-gościa, a SponsorId parametr określa sponsora do usunięcia.

Resetowanie stanu realizacji użytkownika-gościa

W Microsoft Entra ID zresetowanie stanu realizacji użytkownika-gościa jest konieczne, jeśli chcesz zezwolić użytkownikowi na ponowne zrealizowanie zaproszenia. Ta funkcja jest przydatna, jeśli użytkownik nie ukończy procesu realizacji lub jeśli jego stan musi zostać zresetowany z jakiegokolwiek powodu. W poniższym przykładzie pokazano, jak zresetować status realizacji zaproszenia dla użytkownika gościa, wysyłając temu użytkownikowi nowe zaproszenie.

Najpierw zidentyfikuj użytkownika-gościa i wyślij nowe zaproszenie: spowoduje to zresetowanie stanu realizacji przez ponowne zaproszenie użytkownika-gościa.

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

Wyłączanie kont użytkowników-gości

W poniższych przykładach pokazano, jak wyłączyć konta użytkowników-gości w Microsoft Entra ID. Możesz wyłączyć pojedyncze konto gościa lub wyłączyć wszystkie konta gościa na podstawie Twoich wymagań.

Wyłączanie pojedynczego konta użytkownika-gościa

Aby wyłączyć jedno konto użytkownika-gościa:

Nawiąż połączenie z Microsoft Entra z co najmniej rolą administratora użytkowników:

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

Wyłącz wszystkie konta użytkowników-gości

Uruchom następujące polecenie cmdlet, aby wyłączyć wszystkie konta użytkowników-gościa.

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

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

Wyświetlanie i eksportowanie wygasłych kont użytkowników-gości

Aby wyświetlić i wyeksportować wygasłe konta użytkowników-gości:

  1. Rozwiń poprzedni przykład, aby pobrać użytkowników-gości i sprawdzić każdy z nich pod kątem wygaśnięcia. W tym przykładzie przyjęto założenie, że konta gości wygasają 90 dni po utworzeniu.

    $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. Wyeksportuj raport do pliku CSV.

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

Usuwanie wygasłych kont użytkowników-gości

Nawiąż połączenie z Microsoft Entra z co najmniej rolą administratora użytkowników:

W tym przykładzie przyjęto założenie, że konta gości wygasają 90 dni po utworzeniu.

Note

Ten skrypt usuwa wszystkich użytkowników-gości, których konta wygasły. Ta akcja jest nieodwracalna i należy jej używać z ostrożnością. Przed usunięciem kont użytkowników zawsze upewnij się, że masz kopię zapasową lub plan odzyskiwania.

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