Microsoft Entra ID でユーザーを一括削除する

Microsoft Entra の一部である Microsoft Entra ID の管理センターでは、コンマ区切り形式 (CSV) のファイルを使用して、1 グループに属する多人数のメンバーを一括削除できます。

ユーザーを一括削除するには

ヒント

この記事の手順は、開始するポータルによって若干異なる場合があります。

  1. Microsoft Entra 管理センターユーザー管理者以上でサインインしてください。

  2. [Microsoft Entra ID] を選びます。

  3. Azure AD で、ユーザー>すべてのユーザー>一括操作>一括削除 をクリックします。

    [一括削除] オプションが選ばれている [ユーザー] ページのスクリーンショット。

  4. [Bulk delete user](ユーザーの一括削除) ページで、 [Download](ダウンロード) をクリックして、最新バージョンの CSV テンプレートをダウンロードします。

  5. この CSV ファイルを開いて、削除するユーザーごとに 1 行を追加します。 唯一の必須値は、ユーザー プリンシパル名です。 ファイルを保存します。

  6. [ユーザーの一括削除] ページの [CSV ファイルをアップロード] で、そのファイルを参照します。 ファイルを選択して [送信] をクリックすると、CSV ファイルの検証が開始されます。

  7. ファイルの内容が検証されると、"ファイルが正常にアップロードされました" と表示されます。 エラーが存在する場合は、ジョブを送信する前にそれらを修正する必要があります。

  8. ファイルの検証に合格したら、[送信] を選択して、ユーザーを削除する一括操作を開始してください。

  9. 削除操作が完了すると、一括操作が成功したという通知が表示されます。

エラーが発生する場合は、[一括操作の結果] ページで結果ファイルをダウンロードして確認できます。 このファイルには、各エラーの理由が含まれています。 ファイルの送信は、指定されたテンプレートと一致し、正確な列名が含まれている必要があります。 一括操作の制限の詳細については、「一括削除サービスの制限」を参照してください。

CSV テンプレートの構造

以下のダウンロードした CSV テンプレートの例の行は次のとおりです。

  • バージョン番号: アップロード CSV の先頭行にバージョン番号を含める必要があります。
  • 列見出し: User name [userPrincipalName] Required。 古いバージョンのテンプレートでは異なる場合があります。
  • 例の行: テンプレートには使用できる値の例が含まれています。 Example: chris@contoso.com 例の行は削除して、必要な項目に置き換える必要があります。

削除するユーザーの名前と ID を含む CSV ファイルのスクリーンショット。

CSV テンプレートの追加のガイダンス

  • テンプレートは、最初の 2 行を削除または修正しなければ処理できません。
  • 必須の列が最初に示されています。
  • 新しい列をテンプレートに追加しないでください。 列を追加しても無視され、処理されません。
  • 最新バージョンの CSV テンプレートをダウンロードしてから、新たな変更を加えます。

状態の確認

[一括操作の結果] ページでは、保留中のすべての一括要求の状態を確認できます。

[一括操作の結果] ページでの削除状態の確認のスクリーンショット。

次に、削除したユーザーが Microsoft Entra 組織に存在するかどうかを、ポータルまたは PowerShell を使って確認してください。

削除されたユーザーを確認する

  1. Microsoft Entra 管理センターユーザー管理者以上でサインインしてください。
  2. [Microsoft Entra ID] を選びます。
  3. すべてのユーザー のみを選択し、削除したユーザーがリストされなくなったことを確認します。

PowerShell で削除済みユーザーを確認する

次のコマンドを実行します。

Get-MgUser -Filter "UserType eq 'Member'"

削除したユーザーがリストされなくなったことを確認します。

一括削除サービスの制限

それぞれの一括操作アクティビティの最長実行時間は 1 時間であることに注意する必要があります。

Microsoft Entra 管理ポータルでの一括操作は、非常に大規模なテナントではタイムアウトになり失敗する可能性があります。 この制限は、スケーリングの制限が原因である既知の問題です。 Microsoft のエンジニアリング チームは、この制限を最終的には解決する新しいサービスに取り組んでいます。

Note

インポートや作成などの一括操作を実行するときに、一括操作が 1 時間以内に完了しない場合、問題が発生する可能性があります。 この問題を回避するには、バッチごとに処理されるレコードの数を分割することをお勧めします。 たとえば、エクスポートの開始前に、グループの種類またはユーザー名でフィルター処理することで結果セットを制限し、結果のサイズを小さくすることができます。 フィルターを絞り込むことで、実質的には一括操作によって返されるデータを制限していることになります。

この問題のもう 1 つの回避策は、PowerShell を使用して Microsoft Graph API を直接呼び出す方法です。 ユーザーとグループの一括ダウンロードに失敗した場合は、PowerShell コマンドレットの GET-MgGroup -AllGET-MgUser -All を使用することをお勧めします。

以下の PowerShell コード例は、次に関連する一括操作のためのものです。

ユーザー

すべてのユーザーを一括ダウンロードする

# Import the Microsoft Graph module 
Import-Module Microsoft.Graph 

# Authenticate to Microsoft Graph (you may need to provide your credentials) 
Connect-MgGraph -Scopes "User.Read.All" 

# Get all users using Get-MgUser 
$users = Get-MgUser -All -ConsistencyLevel eventual -Property Id, DisplayName, UserPrincipalName,UserType,OnPremisesSyncEnabled,CompanyName,CreationType 

# Specify the output CSV file path 
$outputCsvPath = "C:\\Users\\YourUsername\\Documents\\Users.csv"  

# Create a custom object to store user data 
$userData = @() 

# Loop through each user and collect relevant data 
foreach ($user in $users) { 
    $userObject = [PSCustomObject]@{ 
        Id = $user.Id 
        DisplayName = $user.DisplayName 
        UserPrincipalName = $user.UserPrincipalName 
        UserType = $user.UserType 
        OnPremisesSyncEnabled = $user.OnPremisesSyncEnabled 
        CompanyName = $user.CompanyName 
        CreationType = $user.CreationType 
    } 
    $userData += $userObject 
} 

# Export user data to a CSV file 
$userData | Export-Csv -Path $outputCsvPath -NoTypeInformation 

# Disconnect from Microsoft Graph 
Disconnect-MgGraph 

Write-Host "User data exported to $outputCsvPath" 

ユーザーの一括作成

# Import the Microsoft Graph module 
Import-Module Microsoft.Graph 

# Authenticate to Microsoft Graph (you may need to provide your credentials) 
Connect-MgGraph -Scopes "User.ReadWrite.All" 

# Specify the path to the CSV file containing user data 
$csvFilePath = "C:\\Path\\To\\Your\\Users.csv" 

# Read the CSV file (adjust the column names as needed) 
$usersData = Import-Csv -Path $csvFilePath 

# Loop through each row in the CSV and create users \
foreach ($userRow in $usersData) { 
    $userParams = @{ 
        DisplayName = $userRow.'Name [displayName] Required' 
        UserPrincipalName = $userRow.'User name [userPrincipalName] Required' 
        PasswordProfile = @{ 
            Password = $userRow.'Initial password [passwordProfile] Required' 
        } 
        AccountEnabled = $true 
        MailNickName = $userRow.mailNickName 
    } 
    try { 
        New-MgUser @userParams 
        Write-Host "User $($userRow.UserPrincipalName) created successfully." 
    } catch { 
        Write-Host "Error creating user $($userRow.UserPrincipalName): $($_.Exception.Message)" 
    } 
} 

# Disconnect from Microsoft Graph 
Disconnect-MgGraph 

Write-Host "Bulk user creation completed." 

Note

CSV ファイルに必要な列 (たとえば、DisplayNameUserPrincipalName など) が含まれていることを確認します。 また、CSV ファイル内の実際の列名と一致するようにスクリプトを調整します。

ユーザーの一括削除

# Import the Microsoft Graph module 
Import-Module Microsoft.Graph 

# Authenticate to Microsoft Graph (you may need to provide your credentials) 
Connect-MgGraph -Scopes "User.ReadWrite.All" 

# Specify the path to the CSV file containing user data 
$csvFilePath = "C:\\Path\\To\\Your\\Users.csv" 

# Read the CSV file (adjust the column names as needed) 
$usersData = Import-Csv -Path $csvFilePath 

# Loop through each row in the CSV and delete users 
foreach ($userRow in $usersData) { 
    try { 
        Remove-MgUser -UserId $userRow.UserPrincipalName -Confirm:$false 
        Write-Host "User $($userRow.UserPrincipalName) deleted successfully." 
    } catch { 
        Write-Host "Error deleting user $($userRow.UserPrincipalName): $($_.Exception.Message)" 
    } 
} 

# Disconnect from Microsoft Graph 
Disconnect-MgGraph 

Write-Host "Bulk user deletion completed." 

Note

CSV ファイルに必要な列 (たとえば、UserPrincipalName) が含まれていることを確認します。 また、CSV ファイル内の実際の列名と一致するようにスクリプトを調整します。

グループ

すべてのグループを一括ダウンロードする

Import-Module Microsoft.Graph.Groups 

 # Authenticate to Microsoft Graph (you may need to provide your credentials) 
 Connect-MgGraph -Scopes "Group.Read.All" 

 # Get the group members 
 $groups = Get-MgGroup -All | Select displayName, Id, groupTypes,mail 

 # Create a custom object to store group data 
$groupData = @() 

# Loop through each group and collect relevant data 
foreach ($group in $groups) { 
    if ($group.groupTypes -contains "Unified"){$groupType = "Microsoft 365"} 
    else {$groupType = "Security"} 
    if ($group.groupTypes -contains "DynamicMembership"){$membershipType = "Dynamic"} 
    else {$membershipType = "Assigned"} 
    $groupObject = [PSCustomObject]@{ 
        Id = $group.Id 
        DisplayName = $group.displayName 
        Mail = $group.mail 
        GroupType = $groupType 
        MemebershipType = $membershipType 
    }   
    $groupData += $groupObject 
} 

 # Specify the output CSV file path 
 $outputCsvPath = "C:\\Users\\cewu\\Documents\\Groups.csv" 

 $groupData| Export-Csv -Path $outputCsvPath -NoTypeInformation 
 
 Write-Host "Group members exported to $outputCsvPath" 

グループのメンバーを一括ダウンロードする

Import-Module Microsoft.Graph.Groups 

 # Authenticate to Microsoft Graph (you may need to provide your credentials) 
 Connect-MgGraph -Scopes "Group.Read.All,GroupMember.Read.All" 

 # Set the group ID of the group whose members you want to download 
 $groupId = "your_group_id" 

 # Get the group members 
 $members = Get-MgGroupMember -GroupId $groupId -All | select * -ExpandProperty additionalProperties | Select-Object @( 
                'id'     
                @{  Name       = 'userPrincipalName' 
                    Expression = { $_.AdditionalProperties["userPrincipalName"] } 
                } 
                @{  Name = 'displayName' 
                Expression = { $_.AdditionalProperties["displayName"] } 
                } 
            ) 

 # Specify the output CSV file path 
 $outputCsvPath = "C:\\Users\\YourUserName\\Documents\\GroupMembers.csv" 

 $members| Export-Csv -Path $outputCsvPath -NoTypeInformation 

# Disconnect from Microsoft Graph 
Disconnect-MgGraph 

 Write-Host "Group members exported to $outputCsvPath"  

メンバーを一括で追加する

Import-Module Microsoft.Graph.Groups 

 # Authenticate to Microsoft Graph (you may need to provide your credentials) 
 Connect-MgGraph -Scopes "GroupMember.ReadWrite.All" 

# Import the CSV file 
$members = Import-Csv -Path "C:\path\to\your\file.csv" 

# Define the Group ID 
$groupId = "your-group-id" 

# Iterate over each member and add them to the group 
foreach ($member in $members) { 
    try{ 
        New-MgGroupMember -GroupId $groupId -DirectoryObjectId $member.memberObjectId 
  	 Write-Host "Added $($member.memberObjectId) to the group."  
    } 
    Catch{ 
        Write-Host "Error adding member $($member.memberObjectId):$($_.Exception.Message)" 
    } 
} 

# Disconnect from Microsoft Graph 
Disconnect-MgGraph 

メンバーを一括で削除する

Import-Module Microsoft.Graph.Groups 

 # Authenticate to Microsoft Graph (you may need to provide your credentials) 
 Connect-MgGraph -Scopes "GroupMember.ReadWrite.All" 

# Import the CSV file 
$members = Import-Csv -Path "C:\path\to\your\file.csv" 

# Define the Group ID 
$groupId = "your-group-id" 

# Iterate over each member and add them to the group 
foreach ($member in $members) { 
    try{ 
        Remove-MgGroupMemberByRef -GroupId $groupId -DirectoryObjectId $member.memberObjectId \
        Write-Host "Removed $($member.memberObjectId) from the group." 
    } 
    Catch{ 
        Write-Host "Error removing member $($member.memberObjectId):$($_.Exception.Message)" 
    } 
} 

# Disconnect from Microsoft Graph 
Disconnect-MgGraph 

デバイス

すべてのデバイスを一括ダウンロードする

Import-Module Microsoft.Graph 

 # Authenticate to Microsoft Graph (you may need to provide your credentials) 
 Connect-MgGraph -Scopes "Device.Read.All" 

 # Get all devices  
 $devices = Get-MgDevice -All |select displayName,deviceId,operatingSystem,operatingSystemVersion,isManaged,isCompliant,mdmAppId,registeredOwners,TrustType 

 # Specify the output CSV file path 
 $outputCsvPath = "C:\\Users\\YourUserName\\Documents\\Devices.csv" 

 $devices| Export-Csv -Path $outputCsvPath -NoTypeInformation 

 Write-Host "Devices exported to $outputCsvPath"  

次のステップ