Exchange 恢复已经删除的邮箱

若要将已删除的邮箱连接到用户帐户,该帐户必须存在, 并且 RecipientType 属性的值必须是 User,这表示该帐户尚未启用邮箱。参因为是删除邮箱一并删除的Ad账户,所以需要新建一个AD 账户来连接要恢复的邮箱。

注:在连接删除的链接邮箱、资源邮箱或共享邮箱时,要将邮箱连接到的 Active Directory 用户帐户必须处于禁用状态

实验步骤如下 :

  1. 删除邮箱 demo01
    • Remove-Mailbox -Identity demo01 -Confirm:$false
  2. 查询 AD 账户已经一并删除
    • Get-User -Identity demo01
    • Get-ADUser -Identity demo01
  3. 刷新数据库
    • Get-MailboxStatistics -Database DB1603 | Where { $_.DisconnectReason -ne $null } | ForEach { Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$false }
  4. 再次验证删除的邮箱状态
    • Get-MailboxDatabase | foreach {Get-MailboxStatistics -Database $_.name} | where {$_.DisplayName -eq “demo01”} | Format-List DisplayName,Database,DisconnectReason
  5. 新建用户demo01
    • $splat = @{
    • Name = ‘Demo01’
    • AccountPassword = (Read-Host -AsSecureString ‘AccountPassword’)
    • Enabled = $true
    • }
    • New-ADUser @splat
  6. 连接邮箱 后,之前的邮件并没有被删除
    • Connect-Mailbox -Identity Demo01 -Database DB1603 -User Demon01
  7. Get-User -Identity demon01

Exchange 连接禁用的邮箱

每个 Microsoft Exchange 邮箱都由 Active Directory 用户帐户以及存储在 Exchange 邮箱数据库中的邮箱数据组成。

  • 禁用和删除邮箱的区别
    • 禁用邮箱时,将从对应的 Active Directory 用户帐户中删除 Exchange 属性,但保留此用户帐户。
    •  而删除邮箱之后,Exchange 属性和 Active Directory 用户帐户均会删除。
    • 删除邮箱时, DisconnectReason 属性中的值也是 Disabled。 但是,对应的 Active Directory 用户帐户将会删除
    • 禁用邮箱时, DisconnectReason 属性中的值也是 Disabled。 但是,对应的 Active Directory 用户帐户将会保留下来。
    • 恢复连接邮箱要保证 AD账户是存在的,最好是启用的。
  • 查询邮箱数据库保留时长
    • Get-MailboxDatabase | Select-Object Name ,MailboxRetention
  • 查看断开连接的邮箱 (查看之前最好使用Update-StoreMailboxState)刷新数据库状态
    1. $dbs = Get-MailboxDatabase
    2. $dbs | foreach {Get-MailboxStatistics -Database $_.DistinguishedName} | where {$_.DisconnectReason -ne $null} | Format-Table DisplayName,Database,DisconnectDate
    3. 禁用邮箱demo01
      • Get-MailboxStatistics -Identity demo01 | fl
      • Disable-Mailbox -Identity demo01
      • Get-ADUser -Identity demo01 (查看AD用户 状态)确保AD 用户在启用状态
    4. 刷新数据库状态
      • Get-MailboxStatistics -Database DB1603 | Where { $_.DisconnectReason -ne $null } | ForEach { Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$false }
    5. 查询禁用的邮箱
      • $dbs = Get-MailboxDatabase
      • $dbs | foreach {Get-MailboxStatistics -Database $_.DistinguishedName} | where {$_.DisconnectReason -ne $null} | Format-Table DisplayName,Database,DisconnectDate
    6. 连接邮箱 (Identity 参数最好使用displayname)
      • Connect-Mailbox -Identity demo01 -Database DB1603 -User demon01
    7. 再次刷新数据库
      • Get-MailboxStatistics -Database DB1603 | ForEach { Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$false }
    8. 验证 Get-Mailbox -Identity demo01

Exchange RBAC 基于角色的访问控制

Exchange Role Based Access Control: Management Roles (practical365.com)

https://learn.microsoft.com/zh-cn/powershell/exchange/find-exchange-cmdlet-permissions?view=exchange-ps

Role Based Access Control 是一种权限模型

RBAC 主要有以下两种向组织中的用户分配权限的方法:管理角色组和管理角色分配策略。 每种方法都会将用户与执行其工作所需的权限相关联。 另外,也可以使用第三种更高级的方法,即直接用户角色分配

通用安全组 (USG) :管理角色组是基于角色访问控制 (RBAC) 权限模型中使用的通用安全组 (USG) 

RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程,也即是将权限问题转换为Who、What、How的问题,Who、What、How构成了访问权限三元组,具体的理论可以参考RBAC96

微软定义的RBAC 组件 What\Who\Where 这里的what是可以执行的命令,Who也就是角色,Where是范围也就是可以管理哪些任务。

一般在日常管理中角色(或者说头衔)和权限是紧密联系的,例如经常提到的几个O ,CEO、CFO、CTO等,这些角色被赋予特定的权限。基于上述中的角色进行日常的管理任务;这些角色不被绑定到任何个人,但可以赋予给个人也就是Exchange中所说的成员(member)进行日常的管理工作;归根结底还是哪些人(role)拥有哪些权限(permission)可以做哪些事情(things).这里的things 可以是Exchange 中角色使用操作的命令(cmdlet).

可以使用 Get-RoleGroup 查看Exchange 内置的管理角色组,管理角色组在Exchange 中是特殊的安全组,是可以将用户作为成员添加到其中以授予其执行管理任务的权限的安全组。Built-in role groups: Exchange 2013 Help | Microsoft Learn

可以使用Get-ManagementRole 查看Exchange 内置的管理角色;

结合官网给出的RBAC概念,理解如下 :

  1. 管理角色项(Entry),是用户可以执行的特定任务,例如运行Set-Mailbox cmdlet。
    • Get-ManagementRoleEntry “Mail Recipients\*” | Select Name
  2. 管理角色(ManagementRole),是角色条目的集合,例如邮件收件人角色。
    • Get-ManagementRole “Mail Recipients” | fl Description
    • Get-ManagementRole “Mailbox Import Export” | Format-List
  3. 管理角色范围(Scope),定义管理角色适用于组织中的哪个位置,例如整个组织、特定服务器或特定组织单位。
  4. 管理角色分配(AssigenMent),将管理角色链接到角色组。
  5. 管理角色组(Role Group),是可以将用户作为成员添加到其中以授予其执行管理任务的权限的安全组。

查看管理所属的管理角色组

Get-RoleGroup -Filter “Members -eq ‘abc.com/Users/Administrator'” | Format-Table Name

查看管理角色类型

Get-ManagementRole

Get-ManagementRole -RoleType MailboxImportExport

为成员分配管理角色 (最常用的)

New-ManagementRoleAssignment -Role “Mailbox Import Export” -User “Administrator”

查看CMDLET 执行需要的角色 (role)

$Perms = Get-ManagementRole -Cmdlet Search-MessageTrackingReport
$Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-Table -Auto Role,RoleAssigneeType,RoleAssigneeName}

查看角色分配所属的用户和组

Get-ManagementRoleAssignment -Role “View-Only Recipients” -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne “All Group Members”} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod

AD 单域多站点部署流程

  1. 创建新的站点,
  2. 创建站点子网
  3. 定位DC,或者加入新的DC,或移动现在有DC
  4. 创建站点连接
  5. 设置桥头服务器
  6. 创建站点链接桥(可以作为备用链路)
  7. 常用 命令
    • 查询 站点 dsquery  site
    • 查询 服务器所在的站点 dsquery  server 或 get-addomaincontroller  -filter  *  | ft  Hostname,Site查询站点子网  get-adreplicationsubnet  -filter * | ft name,site
    • 查询 “站点链接”中的站点  get-adreplicationsitelink -filter *  
    • 创建站点链接 new-adreplicationSiteLink -name  ‘bj-wx’ -InterSiteTransportProtocol ip -SitesIncluded bj,wx
    • 设置站点链接开销和复制间隔 set-AdreplicationSiteLink ‘bj-wx’ -Cost 10  -ReplicationFrequencyInMinutes 15
    • 查询站点链接桥 Get-ADReplicationSiteLinkBridge -Filter *