ส่งออกรายงานสมาชิก Microsoft 365 ผู้ดูแลระบบ

ผู้ดูแลระบบจะถูกเพิ่มเข้าไปในกลุ่มบทบาทผู้ดูแลระบบที่แตกต่างกันในหลายองค์กร ส่วนใหญ่เวลาเหล่านี้เป็นบทบาทที่มีอำนาจสูง อย่างไรก็ตามพวกเขาไม่ต้องการสิทธิ์ในการเข้าถึงจำนวนมาก เป็นการดีที่สุดที่จะสร้างรายงานบทบาทผู้ดูแลระบบและดูว่าสมาชิกคนใดถูกเพิ่มเข้ามาในบทบาทผู้ดูแลระบบ ในบทความนี้คุณจะได้เรียนรู้วิธีการส่งออก Microsoft 365 ผู้ดูแลระบบรายงานสมาชิกกับ PowerShell และ Microsoft 365 Admin Center

สมาชิกผู้ดูแลระบบส่งออกใน Microsoft 365 Admin Center

ในการส่งออกสมาชิกบทบาทผู้ดูแลระบบใน Microsoft 365 ทำตามขั้นตอนด้านล่าง:

  1. ลงชื่อเข้าใช้ศูนย์ผู้ดูแลระบบ Microsoft 365
  2. คลิกบทบาท> การกำหนดบทบาท
  3. เลือกMicrosoft Entra ID
  4. คลิกรายชื่อผู้ดูแลระบบส่งออก
  1. เปิด Microsoft Entra ID/Microsoft 365 Admin Role Report ไฟล์ CSV

ข้อเสียของรายงานนี้คือมันไม่ได้แสดงให้ผู้ใช้ในกลุ่ม นั่นคือเมื่อ PowerShell มาช่วย มาดูกันเถอะ

สมาชิกผู้ดูแลระบบส่งออกด้วยสคริปต์ PowerShell

Export-M365Adminroles.PS1 PowerShell Script จะได้รับผู้ใช้ทั้งหมดที่มีบทบาทผู้ดูแลระบบในผู้เช่า Microsoft 365/Entra หลังจากนั้นมันจะส่งออกรายงานไปยังไฟล์ CSV คุณสามารถเปิดไฟล์ CSV ด้วย Microsoft Excel หรือแอปพลิเคชันอื่น ๆ ที่รองรับส่วนขยายไฟล์ CSV

สคริปต์จะรวบรวมข้อมูลต่อไปนี้:

  1. บทบาท
  2. แสดงชื่อ
  3. userprincipalName
  4. สมาชิก
  5. ExinccessfulSignIndateTime (ต้องใช้ใบอนุญาต Microsoft Entra ID P1/P2)
  6. บัญชี
  7. ใบอนุญาต

ในการส่งออกสมาชิกผู้ดูแลระบบทั้งหมดด้วย PowerShell ให้ทำตามขั้นตอนด้านล่าง:

ขั้นตอนที่ 1. ติดตั้ง Microsoft Graph PowerShell

เรียกใช้ Windows PowerShell เป็นผู้ดูแลระบบและติดตั้งโมดูล Microsoft Graph PowerShell

Install-Module Microsoft.Graph -Force

สำคัญ:อัปเดตรุ่น Microsoft Graph PowerShell โมดูลล่าสุดเสมอก่อนที่คุณจะเรียกใช้ CMDLET หรือสคริปต์เพื่อป้องกันข้อผิดพลาดและผลลัพธ์ที่ไม่ถูกต้อง

ขั้นตอนที่ 2 ดาวน์โหลดสคริปต์ PowerShell PowerShell

สร้างสองโฟลเดอร์บนไฟล์(C :)ขับ:

  • สคริปต์
  • อุณหภูมิ

ดาวน์โหลดและวาง Export-M365Adminroles.ps1 PowerShell Script ในC: สคริปต์โฟลเดอร์ สคริปต์จะส่งออกผู้ใช้ทั้งหมดที่มีบทบาทผู้ดูแลระบบไปยังรายงานในไฟล์C: อุณหภูมิโฟลเดอร์

ตรวจสอบให้แน่ใจว่าไฟล์ถูกปิดกั้นเพื่อป้องกันข้อผิดพลาดเมื่อเรียกใช้สคริปต์ อ่านเพิ่มเติมในบทความที่ไม่ได้ลงนามข้อผิดพลาดแบบดิจิทัลเมื่อเรียกใช้สคริปต์ PowerShell

อีกทางเลือกหนึ่งคือการคัดลอกและวางรหัสด้านล่างลงใน Notepad ให้ชื่อ Export-M365Adminroles.ps1 และวางไว้ในC: สคริปต์โฟลเดอร์

<#
    .SYNOPSIS
    Export-M365AdminRoles.ps1

    .DESCRIPTION
    Export all Microsoft 365/Microsoft Entra ID admin roles members to CSV file.

    .LINK
    www.alitajran.com/export-microsoft-365-admin-roles-members/

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.alitajran.com
    LinkedIn:   linkedin.com/in/alitajran
    X:          x.com/alitajran

    .CHANGELOG
    V2.00, 02/10/2025 - Refactored the script for faster performance.
#>

param (
    [Parameter(Mandatory = $true)]
    [string]$ExportPath
)

# Connect to Microsoft Graph with necessary scopes
Connect-MgGraph -Scopes "RoleManagement.Read.Directory", "User.Read.All", "Group.Read.All", "AuditLog.Read.All", "Organization.Read.All" -NoWelcome

# Define CSV file export location variable using the parameter provided
$Csvfile = "$ExportPath"

# Retrieve all subscribed SKUs and check for Entra ID Premium
$hasPremium = $false
$hasPremium = (Get-MgSubscribedSku).ServicePlans.ServicePlanName -contains "AAD_PREMIUM"

# Display status of Premium subscription
if ($hasPremium) {
    Write-Host "Microsoft Entra ID Premium subscription available." -ForegroundColor Cyan
}
else {
    Write-Host "Microsoft Entra ID Premium subscription unavailable." -ForegroundColor Cyan
}

# If Premium is available, include the sign-in activity for the user
$propertyParams = if ($hasPremium) {
    @('AccountEnabled', 'AssignedLicenses', 'SignInActivity')
}
else {
    @('AccountEnabled', 'AssignedLicenses')
}

# Initialize a List to store the data
$Report = [System.Collections.Generic.List[Object]]::new()

# Get all directory roles
$allroles = Get-MgDirectoryRole | Select-Object Id, DisplayName

# Initialize a counter for progress bar
$totalRoles = $allroles.Count
$counter = 0

# Loop through each user to check for role memberships with progress bar
foreach ($role in $allroles) {
    $counter++
    $percentComplete = [math]::Round(($counter / $totalRoles) * 100, 2)
    Write-Progress -Activity "Processing Roles - $percentComplete%" -Status "Role: $($role.DisplayName)" -PercentComplete $percentComplete

    # Get members of each role
    $Rolemembers = Get-MgDirectoryRoleMember -DirectoryRoleId $role.id
    if ($null -ne $Rolemembers) {
        foreach ($Member in $rolemembers) {
            $odataType = $member.AdditionalProperties.'@odata.type'
            switch -regex ($odataType) {
                'user$' {
                    # Get user information including potential sign-in activity
                    $userInfo = Get-MgUser -UserId $member.id -Property $propertyParams | Select-Object $propertyParams
                    $lastSignIn = if ($hasPremium) {
                        if ($userInfo.SignInActivity -and $userInfo.SignInActivity.LastSuccessfulSignInDateTime) {
                            $userInfo.SignInActivity.LastSuccessfulSignInDateTime
                        }
                        else {
                            "Never Signed In"
                        }
                    }
                    else {
                        "Microsoft Entra ID Premium license unavailable"
                    }
                    $memberType = "User"
                    $username = $member.AdditionalProperties.userPrincipalName
                    $accountStatus = if ($userInfo.AccountEnabled) { "Enabled" } else { "Disabled" }
                    $licenseStatus = if ($userInfo.AssignedLicenses) { "Licensed" } else { "Unlicensed" }
                }
                'group$' {
                    $lastSignIn = "N/A"
                    $memberType = "Group"
                    $username = "N/A"
                    $accountStatus = "N/A"
                    $licenseStatus = "N/A"
                }
                default {
                    $lastSignIn = "N/A"
                    $memberType = $odataType.Split('#')[1]
                    $username = "N/A"
                    $accountStatus = "N/A"
                    $licenseStatus = "N/A"
                }
            }

            # Create custom object for report
            $ReportLine = [PSCustomObject][Ordered]@{
                Role                         = $role.DisplayName
                DisplayName                  = $member.AdditionalProperties.displayName
                UserPrincipalName            = $username
                MemberType                   = $memberType
                LastSuccessfulSignInDateTime = $lastSignIn
                AccountStatus                = $accountStatus
                LicenseStatus                = $licenseStatus
            }
            $Report.Add($ReportLine)
        }
    }
}

# Finish the progress bar
Write-Progress -Activity "Processing Roles" -Status "Completed" -PercentComplete 100 -Completed

# Show report in Out-GridView and export report to CSV file
if ($Report.Count -gt 0) {
    $Report | Out-GridView -Title "Microsoft 365 Role Membership Report"
    $Report | Export-Csv -Path $Csvfile -NoTypeInformation -Encoding Utf8
    Write-Host "Report saved at $Csvfile" -ForegroundColor Cyan
}
else {
    Write-Host "No roles were found for any users." -ForegroundColor Yellow
}

ขั้นตอนที่ 3. เรียกใช้สคริปต์ PowerShell PowerShell

เรียกใช้คำสั่งด้านล่างเพื่อเรียกใช้ไฟล์Export-M365Adminroles.ps1สคริปต์ PowerShell และสร้างรายงาน

C:scripts.Export-M365AdminRoles.ps1 -ExportPath "C:tempAdminRolesReport.csv"

เอาต์พุตรายงานจะถูกส่งไปยังตารางแบบโต้ตอบในหน้าต่างแยกต่างหาก (Out-GridView)

ขั้นตอนที่ 4 ตรวจสอบบทบาทผู้ดูแลระบบรายงานไฟล์ CSV

Export-M365Adminroles.ps1 PowerShell Script ส่งออกผู้ใช้ทั้งหมดที่มีบทบาทผู้ดูแลระบบไปยังไฟล์ CSV

ค้นหาไฟล์AdminRolesReport.csvในเส้นทางC: อุณหภูมิ-

เปิดไฟล์ CSV ด้วยแอปพลิเคชันที่คุณชื่นชอบ ในตัวอย่างของเรามันคือ Microsoft Excel

แค่ไหน!

บทสรุป

คุณเรียนรู้วิธีการส่งออกรายงานสมาชิกผู้ดูแลระบบ Microsoft 365 ในขณะที่เป็นไปได้ที่จะส่งออกสมาชิกผู้ดูแลระบบทั้งหมดจาก Microsoft 365 Admin Center แต่ก็เป็นการดีกว่าที่จะใช้ PowerShell สำหรับรายงาน นั่นเป็นเพราะคุณจะเห็นผู้ใช้ทั้งหมดและไม่ใช่กลุ่มใด ๆ ในฐานะสมาชิก นอกจากนี้คุณสามารถเพิ่มคุณสมบัติทุกประเภทที่คุณต้องการในไฟล์ CSV ส่งออกซึ่งเหมาะสำหรับรายงาน

คุณสนุกกับบทความนี้หรือไม่? คุณอาจชอบวิธีกำหนดค่า Microsoft Entra Privileged Identity Management (PIM) อย่าลืมติดตามเราและแบ่งปันบทความนี้

อ่านด้วย:

Related Posts