使用 Microsoft Graph PowerShell 创建非活动 M365 用户报告
由于 Microsoft 365 租户中有许多用户,因此很难简单地浏览用户列表来确定其是否准确。除此之外,您还需要确保您的账单不会被超额收取,并且您不会因租户中仍保留休眠和可用帐户而面临额外的妥协风险。
在本教程中,我将向您展示如何使用 Microsoft Graph PowerShell 导出租户中的活动和非活动用户列表。然后,您可以使用此信息来清除和不活动的用户帐户。
先决条件
要生成本教程中的非活动 Microsoft 365 用户报告,您必须确保安装了 Microsoft Graph PowerShell Beta 模块。请在此处查看我的教程:如何安装 Microsoft Graph PowerShell 模块,其中详细介绍了如何安装和升级 Microsoft Graph PowerShell 模块。
除此之外,要在 Microsoft Entra 中授予对 Microsoft Graph API 权限的同意,您需要在脚本开始时使用全局管理员帐户以交互方式登录。完成后,您可以降低用于登录的帐户的权限。
您将授予 Microsoft Graph 命令行工具应用程序的权限包括:
- 用户.阅读.全部
- 审核日志读取全部
非活动 M365 用户报告脚本
要使用该脚本,我建议将光标悬停在下面的脚本上,然后使用右上角的复制功能。然后将脚本粘贴到 IDE、PowerShell ISE 或记事本中,并确保您了解它在做什么。如果您满意,可以从 PowerShell ISE 运行它或将其粘贴到您的 PowerShell 会话中。
重要:在您的环境中运行脚本之前,请始终彻底了解脚本的用途。即使不进行任何更改,提醒您的安全团队告知运行脚本将生成的任何潜在警报通常也是有益的。
该脚本将首先使用 Get-MgBetaUser cmdlet 收集租户中的所有用户。然后,它将循环访问每个用户以获取他们的基本信息,包括登录活动和许可分配,然后使用此信息生成一个新的 PowerShell 对象并将其添加到报告中。然后,报告将以 CSV 文件格式导出到 C:\temp\,您可以在其中对 LastSignIn 活动列进行筛选和排序以获得结果。
<#
AUTHOR: Daniel Bradley
LINKEDIN: https://www.linkedin.com/in/danielbradley2/
TWITTER: https://twitter.com/DanielatOCN
WEBSITE: https://ourcloudnetwork.com/
Info: This script was written by Daniel Bradley for the ourcloudnetwork.com blog
#>
#Connect to Microsoft Graph
Connect-MgGraph -scope User.Read.All, AuditLog.read.All
#Gather all users in tenant
$AllUsers = Get-MgBetaUser -All -Property signinactivity
#Create a new empty array list object
$Report = [System.Collections.Generic.List[Object]]::new()
Foreach ($user in $AllUsers)
{
#Null variables
$SignInActivity = $null
$Licenses = $null
#Display progress output
Write-host "Gathering sign-in information for $($user.DisplayName)" -ForegroundColor Cyan
#Get current user information
$licenses = (Get-MgBetaUserLicenseDetail -UserId $User.id).SkuPartNumber -join ", "
#Create informational object to add to report
$obj = [pscustomobject][ordered]@{
DisplayName = $user.DisplayName
UserPrincipalName = $user.UserPrincipalName
Licenses = $licenses
LastInteractiveSignIn = $User.SignInActivity.LastSignInDateTime
LastNonInteractiveSignin = $User.SignInActivity.LastNonInteractiveSignInDateTime
LastSuccessfullSignInDate = $User.SignInActivity.AdditionalProperties.lastSuccessfulSignInDateTime
}
#Add current user info to report
$report.Add($obj)
}
$report | Export-CSV -path C:\temp\Microsoft365_User_Activity-Report.csv -NoTypeInformation
概括
尽管拥有高效的入职和离职流程,但可能没有必要这样做。然而,随着时间的推移,帐户可能会被遗忘,您可能会对所发现的内容感到惊讶。
不活跃和获得许可的用户的成本高昂,拥有昂贵许可证的多个用户每月很容易就会浪费数百英镑。 Microsoft 不会为您进行尽职调查,因此您必须自己完成!
除了成本之外,不活动的用户帐户也是危害或滥用租户访问权限的另一个媒介。过去,我多次看到配置不当的租户,只是发现由于用户工作能力的影响而导致的漏洞,这种情况通常只有在攻击者用尽他们可以从组织窃取的东西并决定引发严重破坏时才会发生。如果非活动用户受到威胁,与活动用户相比,它可能会在更长的时间内未被检测到。