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

[玩转系统] 使用 PowerShell 从 AD 回收站恢复 OU 树

作者:精品下载站 日期:2024-12-14 07:15:45 浏览:17 分类:玩电脑

使用 PowerShell 从 AD 回收站恢复 OU 树


活动目录回收站

Active Directory 回收站是 Windows Server 2008 R2 中引入的一项出色功能,可以撤消意外删除的 Active Directory 对象。这意味着,如果启用了 Active Directory 回收站,则已删除对象的所有链接值和非链接值属性都会保留,并且可以完整恢复该对象。

要启用 Active Directory 回收站,林功能级别必须至少位于 Windows Server 2008 R2 上。另请注意,启用回收站是不可逆的操作。启用回收站的推荐方法是使用 PowerShell cmdlet Enable-ADOptionalFeature,如下所示:

$Forest = (Get-ADForest).Name
Enable-ADOptionalFeature -Identity 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target $Forest

[玩转系统] 使用 PowerShell 从 AD 回收站恢复 OU 树

回收站的工作原理

首先,对象可恢复的时间称为已删除对象生存期,默认设置为 180 天。容器 CN=Directory Service、CN=Windows NT、CN=Services、CN=Configuration、DC=ad、DC=simonw、DC=se 具有名为 msDS-deletedObjectLifetime 的属性,该属性控制已删除对象的生存期。

要使用 PowerShell 更改此值,我使用以下代码:

$DeletedObjectLifetime = 190
$RootDSE = Get-ADRootDSE
$Configuration = $RootDSE.configurationNamingContext
$Params = @{
    Identity  = “CN=Directory Service,CN=Windows NT,CN=Services,$Configuration”
    Partition = $Configuration
    Replace   = @{'msDS-DeletedObjectLifetime' = $DeletedObjectLifetime}
}

Set-ADObject @Params

现在,当有人从 Active Directory 中删除对象时,该对象实际上会移动到容器 CN=Deleted Objects,DC=ad,DC=simonw,DC=se 及其属性 isDeleted设置为 TRUE。这种状态称为逻辑删除,并持续删除对象的生命周期。

恢复单个对象

启用回收站后,可以使用 Active Directory 管理中心导航到“已删除对象”容器,右键单击该对象并选择“恢复”,轻松恢复单个已删除对象。

[玩转系统] 使用 PowerShell 从 AD 回收站恢复 OU 树

或者我们当然可以使用 PowerShell:

[玩转系统] 使用 PowerShell 从 AD 回收站恢复 OU 树

我在这里所做的是首先通过对 isDeleted 属性使用 Get-ADObject 过滤来查找我想要恢复的用户,以仅搜索已删除的对象且名称为 User1*。当我确定我的查询仅返回我想要恢复的一个用户时,我重复使用相同的命令将其通过管道传输到 Restore-ADObject。

这一切都很棒,直到有人意外删除了整个 OU 结构。

如果我想恢复一个其最后一个已知父级不存在的对象,那么在恢复其自身对象之前定位和恢复该父级就会变得有点麻烦。如果整个 OU 结构被删除(是的,我知道应该防止意外删除,但那是另一个故事),恢复可能会很痛苦。

我的朋友吉米·安德森 (Jimmy Andersson) 就是在这里编写了一个脚本,并于 2014 年 5 月在奥勒举行的一次会议上进行了演示。

在他的支持下,我重写了该脚本,实现了一些 PowerShell 最佳实践、错误处理并扩展了一些功能。该脚本支持两种恢复对象的方式:通过 Identity 或通过 LastKnownRDN。

恢复组织单位内任何已删除的对象(按身份)

如果我想恢复曾经驻留在 OU OU=Corporate,DC=ad,DC=simonw,DC=se 中的任何对象,只需运行如下脚本:

.Restore-ADTree.ps1 -Identity ‘OU=Corporate,DC=ad,DC=simonw,DC=se’ -Verbose

[玩转系统] 使用 PowerShell 从 AD 回收站恢复 OU 树

为了还恢复曾经驻留在任何实时子 OU 中的任何对象,我只需添加参数 -IncludeLiveChildren,如果我想输出所有恢复的对象,我添加参数 -PassThru。

恢复已删除的 OU 及其所有子对象(由 LastKownRDN 提供)

现在,如果我不小心删除了一个 OU,并且不想将每个子对象恢复到该 OU 的父对象,则还有另一种运行脚本的方法。

举例来说,假设我删除了以下 OU:

OU=销售,OU=公司,DC=ad,DC=simonw,DC=se

OU=市场、OU=企业、DC=ad、DC=simonw、DC=se

市场 OU 应保持删除状态,但我想恢复销售 OU。下面的行将完全执行此操作:

Restore-ADTree.ps1 -lastKnownRDN Sales -Verbose

[玩转系统] 使用 PowerShell 从 AD 回收站恢复 OU 树

如果我有多个 LastKnownRDN 为“Sales”的已删除对象,我可以添加参数 -lastKnownParent 'OU=Corporate,DC=ad,DC=simonw,DC=se' 以仅恢复曾经驻留在该 OU 中的对象都是孩子。

附加选项和特殊情况

如果删除一个对象并使用相同的 RDN 创建一个新对象,然后又将其删除,则脚本将始终选择最旧(第一个)删除的对象。

要仅恢复在特定时间后删除的对象,请使用参数 -TimeFilter。

当不完全确定要恢复什么时,使用参数 -WhatIf 或 -Confirm。

整个脚本可以从 Technet Galleries 下载

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

取消回复欢迎 发表评论:

关灯