Microsoft Entra PowerShell を使用してゲスト アカウントを管理する

Microsoft Entra IDのゲスト アカウントを使用すると、外部ユーザーは、組織の完全なメンバーにならずに、ファイル、チーム、サイトなどの特定のリソースにアクセスできます。 通常、これらのアカウントは、組織のリソースへの一時的なアクセスが必要なパートナー、請負業者、またはクライアントとの共同作業に使用されます。

ゲスト アカウントを効果的に管理することは、組織のデータのセキュリティと整合性を維持するために重要です。 管理者は、ゲスト アカウントに、目的のタスクを実行するために必要なアクセス許可とアクセス権のみが付与されるようにする必要があります。 これらのアカウントを定期的に確認および監査することは、削除する必要がある非アクティブまたは期限切れのアカウントを特定するためにも重要です。 この演習は、潜在的なセキュリティ リスクを軽減するだけでなく、組織のリソースを効率的に使用できるようにします。 ゲスト アカウントを適切に管理することで、外部コラボレーション用のセキュリティで保護された生産性の高い環境を提供できます。

前提条件

Microsoft Entra PowerShell でゲスト ユーザーを管理するには、次のものが必要です。

ゲスト ユーザー アカウントを招待する

Microsoft Entra PowerShell を使用して、ゲスト ユーザーを組織に招待できます。 このプロセスにより、外部ユーザーは完全なメンバーにならずに、組織内の特定のリソースにアクセスできます。 1 人のゲスト ユーザーを招待することも、一度に複数のゲスト ユーザーを一括招待することもできます。

1 つのゲスト ユーザー アカウントを招待する

少なくともゲスト 招待者 ロールを持つ 1 人のゲスト ユーザーを組織に招待する。

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

このスクリプトは、電子メール アドレスが guestUser@contoso.comゲスト ユーザーに招待を送信し、承諾時に https://contoso.com するように指示します。 次の出力は、招待されたゲスト ユーザーの詳細を示しています。

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

ゲスト ユーザー アカウントを一括招待する

ゲスト ユーザーを組織に一括招待するには:

  1. CSV ファイルを準備する

    Microsoft Excelで、招待されたユーザー名と電子メール アドレスの一覧を含む CSV ファイルを作成します。 [名前] 列見出しと [電子メール] 列見出しを必ず含めます。

    たとえば、次の形式のワークシートを作成します。

    名前 Email
    リード・スミス rsmith@contoso.com
    ヘイデン クック hcook@fabricam.com
    Isabel Garcia igarcia@contoso.com

C:\BulkInvite\Invitations.csvまたは任意の場所としてファイルを保存します。

Excelがない場合は、メモ帳などの任意のテキスト エディターで CSV ファイルを作成できます。 各値はカンマで、各行は改行で区切ってください。

少なくともゲスト招待者ロールを持つMicrosoft Entraに接続します。

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
}

このスクリプトは、CSV ファイルから招待の一覧をインポートします。 招待されたユーザーのカスタム メッセージを定義し、各招待を反復処理して、メール アドレスを使用して各ユーザーに招待を送信します。

次の出力は、招待されたゲスト ユーザーの詳細を示しています。

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…

ゲスト ユーザー アカウントの表示とエクスポート

ゲスト ユーザーを表示およびエクスポートするには:

少なくともゲスト招待者ロールを持つMicrosoft Entraに接続します。

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"

スクリプトは、表示名、電子メール アドレス、作成日を使用して、Microsoft Entra IDからすべてのゲスト ユーザー アカウントを取得し、それらのゲスト ユーザーの一覧を表示します。

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

ゲスト ユーザー のスポンサー プランを管理する

Microsoft Entra IDでは、ゲスト スポンサープランを使用すると、特定のユーザーまたはグループをゲスト ユーザーのスポンサーとして指定し、ゲスト ユーザーのアクセスとアクセス許可を管理できます。 この機能は、外部ユーザーのアクセスを制御および監視する組織に役立ちます。

ゲスト ユーザー スポンサープランを管理するには、ゲスト ユーザーに対するスポンサーの割り当て、表示、および削除を行います。 これらのアクションを実行するには、少なくとも ユーザー管理者 ロールが必要です。

ゲスト ユーザーにスポンサーを割り当てる

次の例は、Microsoft Entra IDでゲスト ユーザーにスポンサーを割り当てる方法を示しています。 New-EntraUserSponsor コマンドレットを使用して、指定したゲスト ユーザーにスポンサーを割り当てることができます。

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

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

次の使用例は、Microsoft Entra IDのゲスト ユーザーにスポンサーを割り当てます。 UserId パラメーターはゲスト ユーザーを指定し、SponsorId パラメーターはスポンサーを指定します。

ゲスト ユーザーのスポンサーを表示する

次の例は、Microsoft Entra IDでゲスト ユーザーのスポンサーを表示する方法を示しています。 Get-EntraUserSponsor コマンドレットを使用して、指定したゲスト ユーザーのスポンサーを取得できます。

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

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

この例では、Microsoft Entra IDのゲスト ユーザーのスポンサーを取得します。 UserId パラメーターは、ゲスト ユーザーを指定します。

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

ゲスト ユーザーからスポンサーを削除する

次の例は、Microsoft Entra IDのゲスト ユーザーからスポンサーを削除する方法を示しています。 Remove-EntraUserSponsor コマンドレットを使用して、指定したゲスト ユーザーからスポンサーを削除できます。

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

この例では、Microsoft Entra IDのゲスト ユーザーからスポンサーを削除します。 UserId パラメーターはゲスト ユーザーを指定し、SponsorId パラメーターは削除するスポンサーを指定します。

ゲスト ユーザーの招待受諾状態をリセットする

Microsoft Entra IDでは、ユーザーが招待を再び引き換えることを許可する場合に、ゲスト ユーザーの引き換え状態をリセットする必要があります。 この機能は、ユーザーが引き換えプロセスを完了しない場合、または何らかの理由で状態をリセットする必要がある場合に役立ちます。 次の例では、ゲスト ユーザーに新しい招待を送信して、引き換えの状態をリセットする方法を示します。

最初にゲスト ユーザーを特定し、新しい招待を送信します。これにより、ゲスト ユーザーをもう一度招待することで引き換えの状態がリセットされます。

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

ゲスト ユーザー アカウントを無効にする

次の例は、Microsoft Entra IDでゲスト ユーザー アカウントを無効にする方法を示しています。 1 つのゲスト アカウントを無効にすることも、要件に基づいてすべてのゲスト アカウントを無効にすることもできます。

1 つのゲスト ユーザー アカウントを無効にする

1 つのゲスト ユーザー アカウントを無効にするには:

少なくともユーザー管理者ロールを使用してMicrosoft Entraに接続します。

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

すべてのゲスト ユーザー アカウントを無効にする

次のコマンドレットを実行して、すべてのゲスト ユーザー アカウントを無効にします。

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

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

期限切れのゲスト ユーザー アカウントを表示およびエクスポートする

期限切れのゲスト ユーザー アカウントを表示およびエクスポートするには:

  1. 前の例を展開してゲスト ユーザーを取得し、それぞれに有効期限があるかどうかを確認します。 この例では、作成後 90 日後にゲスト アカウントの有効期限が切れると想定しています。

    $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. レポートを CSV ファイルにエクスポートします。

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

期限切れのゲスト ユーザー アカウントを削除する

少なくともユーザー管理者ロールを使用してMicrosoft Entraに接続します。

この例では、作成後 90 日後にゲスト アカウントの有効期限が切れると想定しています。

Note

このスクリプトは、アカウントの有効期限が切れているすべてのゲスト ユーザーを削除します。 このアクションは元に戻すことができないので、注意して使用する必要があります。 ユーザー アカウントを削除する前に、必ずバックアップまたは復旧計画を用意してください。

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