ส่งออกสถานะ MFA ของผู้ใช้ Microsoft 365 ทั้งหมดด้วย PowerShell
ในโพสต์นี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถใช้ PowerShell เพื่อส่งออกรายงานเกี่ยวกับสถานะ MFA ของผู้ใช้ทั้งหมดใน Microsoft 365 ได้อย่างไร ซึ่งจะทำให้คุณเห็นภาพรวมที่ชัดเจน ของสถานะปัจจุบันของการตั้งค่า MFA ของผู้ใช้ของคุณ
นอกจากนี้ การดูสถานะ MFA ของผู้ใช้ของคุณด้วยวิธีที่ชัดเจนและรัดกุมยังเป็นประโยชน์อย่างยิ่ง หากคุณวางแผนที่จะกำหนดบทบาทการเข้าถึงแบบมีเงื่อนไขในสภาพแวดล้อมของคุณเพื่อบังคับใช้ MFA แต่ไม่มีการสมัครใช้งาน Azure เพื่อเปิดใช้งานการวิเคราะห์บันทึก
ตัวเลือกอื่นๆ เพียงอย่างเดียวในการดูสถานะ MFA ของผู้ใช้ของคุณคือการใช้หน้าเว็บผู้ใช้การตรวจสอบสิทธิ์แบบหลายปัจจัยในศูนย์การจัดการ Microsoft 365 อย่างไรก็ตาม ฟังก์ชันนี้ขาดฟังก์ชันที่มีประโยชน์จริงๆ เช่น การส่งออก กรองหรือระบุวิธีการรับรองความถูกต้องที่ใช้อยู่
นอกจากนี้ หากคุณต้องการเรียนรู้วิธีบังคับใช้วิธีการรับรองความถูกต้องที่ปลอดภัยยิ่งขึ้น เช่น การป้องกันการใช้การตรวจสอบสิทธิ์ SMS โปรดดูบทช่วยสอนของฉันเกี่ยวกับวิธีการเปิดใช้งานคำสั่ง need การตั้งค่าความแข็งแกร่งของการรับรองความถูกต้องในการเข้าถึงแบบมีเงื่อนไข
ข้อกำหนดเบื้องต้น
เพื่อให้สคริปต์นี้ทำงานได้ คุณต้องมีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบส่วนกลางสำหรับผู้เช่า Microsoft 365 ของคุณ ทั้งนี้เพื่อให้แน่ใจว่าคุณสามารถอ่านข้อมูลที่เกี่ยวข้องทั้งหมดที่จะส่งออกได้ หากคุณไม่แน่ใจว่าคุณมีสิทธิ์เข้าถึงระดับนี้หรือไม่ โปรดติดต่อทีมไอทีของคุณหรือขอให้พวกเขาเรียกใช้สคริปต์นี้ในนามของคุณ
คุณควรจะติดตั้งโมดูล MSOnline PowerShell ด้วย หากคุณไม่แน่ใจว่าต้องทำอย่างไร โปรดดูโพสต์ของฉัน: วิธีแก้ไขคำว่า 'Connect-MsolService' ไม่ได้รับการยอมรับ
ส่งออกสถานะ MFA ของผู้ใช้ด้วย PowerShell
สคริปต์สำหรับส่งออกข้อมูล MFA ของผู้ใช้แต่ละรายนั้นค่อนข้างง่าย โดยจะเริ่มต้นด้วยการเชื่อมต่อกับบริการ MSOnline ซึ่งคุณจะเห็นข้อความโต้ตอบเพื่อให้คุณเข้าสู่ระบบทันที เมื่อเข้าสู่ระบบแล้ว ระบบจะรวบรวมรายชื่อบัญชีผู้ใช้ทั้งหมดในผู้เช่าของคุณ จากนั้นวนซ้ำผู้ใช้แต่ละรายเพื่อจัดเก็บข้อมูล MFA เมื่อเสร็จแล้ว ข้อมูลจะถูกส่งออกเป็นไฟล์ CSV บนระบบของคุณที่ C:\temp
คุณสามารถคัดลอกและวางสคริปต์ด้านล่างลงใน PowerShell หรือคุณสามารถบันทึกเป็นไฟล์ .ps1 และเรียกใช้ในลักษณะนั้นได้
#Connect to Microsoft Online
Connect-MsolService
#Get all user accounts
Write-Host "Finding accounts..." -ForegroundColor white -BackgroundColor Black
$Users = Get-MsolUser -All | Where-Object { $_.UserType -ne "Guest" }
#create a new object
$Report = [System.Collections.Generic.List[Object]]::new()
#pause and display information
Start-Sleep 1.5
Write-Host $users.count "Accounts found" -ForegroundColor white -BackgroundColor Black
#Loop through each user, gather information on mfa status and methods and add to report
ForEach ($user in $users) {
$mfadefaultmethod = ($User.StrongAuthenticationMethods | Where-Object { $_.IsDefault -eq "True"}).methodtype
$userupn = $user.UserPrincipalName
$displayname = $user.displayname
If (($user.StrongAuthenticationRequirements.state) -eq "Enforced") {
$state = $User.StrongAuthenticationRequirements.State
}
Else {
$state = 'Disabled'
}
If ($mfadefaultmethod) {
Switch ($mfadefaultmethod) {
"OneWaySMS" { $Method = "SMS" }
"TwoWayVoiceMobile" { $Method = "Phone call" }
"PhoneAppOTP" { $Method = "Hardware token or authenticator app" }
"PhoneAppNotification" { $Method = "Authenticator app" }
}
}
Else {
$mfadefaultmethod = "Not set"
}
$ReportLine = [PSCustomObject] @{
UserPrincipalName = $User.UserPrincipalName
DisplayName = $User.DisplayName
MFAState = $State
MFADefaultMethod = $MFADefaultMethod
}
$Report.Add($ReportLine)
}
#Export report to CSV file
$Report | Export-CSV -Encoding UTF8 -NoTypeInformation "c:\temp\m365mfareport.csv"
Write-Host "Data exported to C:\temp folder" -ForegroundColor white -BackgroundColor Black