当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 实用图:如何批量删除Entra ID账户

作者:精品下载站 日期:2024-12-14 04:10:27 浏览:13 分类:玩电脑

实用图:如何批量删除Entra ID账户


查找并删除大量 Azure AD 帐户

在讨论了如何创建 Azure AD 帐户等主题之后,我们应该考虑如何在 Azure AD 帐户生命周期的另一端批量删除其问题。删除单个帐户不值得讨论,因为通过 Microsoft 365 管理中心、Microsoft Entra 管理中心或 Microsoft Graph PowerShell SDK 中的 Remove-MgUser cmdlet 可以轻松完成此操作。

批量删除更有趣。 Microsoft 365 管理中心和 Microsoft Entra 管理中心都支持在一次操作中删除多个帐户的功能(图 1),并且该方法适用于删除相对少量的帐户。然而,一旦要删除的帐户数量增加,程序化方法就会更加有效。

[玩转系统] 实用图:如何批量删除Entra ID账户

您会发现许多文章郑重地记录了如何在从 AzureAD 或 MSOL 模块(均已弃用)调用 cmdlet 来删除帐户之前,从 CSV 文件中读取要删除的帐户名称。从 CSV 文件中读取姓名和其他帐户信息会创建一组帐户进行处理。我在这里争论的一点是,存在更有趣的方法来查找要删除的帐户。

学年结束时删除学生

例如,以许多教育机构在学年结束时所处的情况为例。许多学生帐户在完成课程后就会过期,需要删除以释放新学生的作业许可证。第一个问题是如何识别相关账户。

在另一篇文章中,我介绍了如何使用筛选器通过 PowerShell 查找 Azure AD 帐户。其中一种方法是使用十五个 Exchange 自定义扩展属性来存储用于查找帐户的信息。对于学生,您可以使用自定义扩展属性来存储学生的以下内容:

  • 课程编号。
  • 注册号。
  • 注册到期日期。

在本例中,我们将使用存储注册到期日期的自定义扩展属性来查找学年结束时的学生帐户。

在检查自定义属性中保存的数据时,Exchange Online Get-ExoMailbox cmdlet 更加灵活。此示例演示如何创建已过期的学生帐户数组。在本例中,CustomAttribute1 存储诸如 20230601 之类的值来表示 2023 年 6 月 1 日。您可以以其他日期格式存储信息,但这对于我们需要执行的检查很方便。

[string]$EndAcademicYear = (Get-Date -format yyyyMMdd)
[array]$StudentAccounts = Get-ExoMailbox -Filter "CustomAttribute1 -le '$EndAcademicYear'" -Properties CustomAttribute1
If (!($StudentAccounts)) { Write-Host "No expired student accounts found!" ; break }

请记住,Exchange Online 返回用户主体名称和帐户标识符(在ExternalDirectoryObjectId 属性中)等信息,这些信息可与 Microsoft Graph PowerShell SDK cmdlet 一起使用以与用户帐户进行交互。

解雇临时员工

可能需要批量删除帐户的另一个例子是在合同期结束后删除临时雇员的帐户。 Azure AD 包含一些方便的帐户属性来保存就业信息,包括就业类型。

不幸的是,Get-MgUser cmdlet 不支持针对 EmployeeType 属性进行过滤,因此我们最终会执行类似的操作来获取用户帐户信息并对其进行处理以确定是否临时工超过一年的雇佣期限。

[datetime]$ExpirationDate = Get-Date
[array]$Employees = Get-MgUser -filter "userType eq 'Member' and EmployeeId ge ' '" -Property Id, displayname, userprincipalname, employeeid, employeehiredate, employeetype
If ($Employees) {
   $Employees = $Employees | Where-Object {$_.EmployeeType -eq 'Temporary’} 
} Else {
   Write-Host "No employees found" ; break
}
$AccountsforDeletion = [System.Collections.Generic.List[Object]]::new() 
ForEach ($Employee in $Employees) {
    [datetime]$EmployeeExpirationDate = (Get-Date $Employee.EmployeeHireDate).AddDays(365)
    If ($EmployeeExpirationDate -lt $ExpirationDate) {
       $ReportLine = [PSCustomObject]@{
         EmployeeUserId = $Employee.Id
         EmployeeUPN    = $Employee.UserPrincipalName
         EmployeeId     = $Employee.EmployeeId
         EmployeeName   = $Employee.displayName
         EmployeeDate   = $Employee.EmployeeHireDate
         EmployeeType   = $Employee.EmployeeType
         ExpiryDate     = $EmployeeExpirationDate }  
    $AccountsForDeletion.Add($ReportLine)      
    }
}

你明白了。在批量删除 Azure AD 帐户之前,我们需要知道要删除的帐户集并以 PowerShell 可以处理的形式(列表或数组)提供该信息。在进行任何删除之前,最好让额外的人员检查一组帐户,以确保可以继续进行。

批量删除 Azure AD 帐户

删除一组 Azure AD 帐户只需循环访问该组帐户并调用Remove-MgUser 来删除每个帐户即可。唯一的先决条件是该集必须包含一个属性,以允许 Azure AD 识别每个帐户。这可以是帐户的用户主体名称或对象标识符。对于临时员工,集合中的每个项目如下所示:

EmployeeUserId : 6fd89e40-665a-4efa-9691-da07849cae91
EmployeeUPN    : [email protected]
EmployeeId     : 111888
EmployeeName   : Rene Artois
EmployeeDate   : 08/03/2022 21:19:10
EmployeeType   : Temporary
ExpiryDate     : 08/03/2023 21:19:10

删除帐户的代码非常简单:

ForEach ($Account in $AccountsForDeletion) {
   Write-Host ("Deleting account {0}" -f $Account.EmployeeName
   Remove-MgUser -UserId $Account.EmployeeUserId }

请注意,Remove-MgUser cmdlet 在删除帐户之前不需要确认。删除的帐户将进入 Azure AD 帐户回收站并保留 30 天。在此期间,您可以通过运行 Restore-MgDirectoryDeletedItem cmdlet 来恢复帐户(有关详细信息,请参阅本文)。如果要在 30 天保留期结束之前从 Azure AD 中永久删除已删除的帐户,可以通过运行 Remove-MgDirectoryDeletedItem cmdlet 来实现。

保留数据

具有 Office 365 E3 许可证的帐户可以保留已删除帐户拥有的邮箱和 OneDrive for Business 内容。最简单的方法是为所有帐户部署通用保留策略,以在短时间内(例如六个月)保留内容。单独的保留政策可以涵盖具有更紧迫保留要求的帐户,例如高管或负责审计的人员。 Microsoft Purview 使用的保留原则意味着适用最长保留期,因此属于多个保留策略所涵盖的帐户的数据将保留,直到最长保留期到期。因此,应用保留期较短的保留策略作为后盾是相当安全的。

一些专家主张在删除其所属帐户之前对每个邮箱进行诉讼保留。诉讼(或法律)保留与邮箱的保留策略具有相同的效果,但会忽略 OneDrive for Business 帐户中保留的其他个人数据。总的来说,我认为保留政策是更好的选择。

目录准确性是关键

批量删除 Azure AD 帐户很容易。操作的关键是能够准确识别目标账户。 Azure AD 必须在筛选器发挥作用之前保存准确的信息。如果 Azure AD 数据不准确,您不妨重新使用 CSV 文件来驱动批量帐户删除操作。当然,没有理由假设 CSV 文件的内容是准确的,但至少如果不准确,您可以责怪创建该文件的人。

Active Directory 的网络安全风险管理

了解如何通过这些网络安全风险管理解决方案预防 AD 攻击并从中恢复。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯