Khôi phục cây OU từ Thùng rác AD bằng PowerShell
Thùng rác thư mục hoạt động
Thùng rác Active Directory là một tính năng tiện lợi được giới thiệu với Windows Server 2008 R2 và giúp bạn có thể hoàn tác việc vô tình xóa một đối tượng Active Directory. Điều này có nghĩa là nếu Thùng rác Active Directory được bật, tất cả các thuộc tính có giá trị liên kết và không có giá trị liên kết của một đối tượng đã xóa sẽ được giữ nguyên và đối tượng có thể được khôi phục toàn bộ.
Để bật Thùng rác Active Directory, mức chức năng nhóm ít nhất phải có trên Windows Server 2008 R2. Cũng lưu ý rằng việc bật Thùng rác là một hành động không thể đảo ngược. Cách được khuyến nghị để bật Thùng rác là sử dụng lệnh ghép ngắn PowerShell Enable-ADOptionalFeature, ví dụ như sau:
$Forest = (Get-ADForest).Name
Enable-ADOptionalFeature -Identity 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target $ForestThùng rác hoạt động như thế nào
Trước hết, khoảng thời gian mà một đối tượng có thể phục hồi được gọi là thời gian tồn tại của đối tượng đã xóa và được đặt mặc định là 180 ngày. Vùng chứa CN=Directory Service,CN=Windows NT, CN=Services, CN=Configuration, DC=ad,DC=simonw,DC=se có một thuộc tính có tên msDS-deletedObjectLifetime kiểm soát thời gian tồn tại của đối tượng đã xóa.
Để thay đổi giá trị này bằng PowerShell, tôi sử dụng đoạn mã sau:
$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
Bây giờ, khi ai đó xóa một đối tượng khỏi Active Directory, nó thực sự được chuyển đến vùng chứa CN=Deleted Objects,DC=ad,DC=simonw,DC=se và thuộc tính của nó isDeleted được đặt thành TRUE. Trạng thái này được gọi là bị xóa một cách logic và tồn tại trong suốt thời gian tồn tại của đối tượng bị xóa.
Khôi phục các đối tượng đơn lẻ
Sau khi bật thùng rác, một đối tượng đã xóa có thể dễ dàng được khôi phục bằng cách sử dụng Trung tâm quản trị Active Directory bằng cách điều hướng đến vùng chứa 'Đối tượng đã xóa', nhấp chuột phải vào đối tượng và chọn 'Khôi phục'.
Hoặc tất nhiên chúng ta có thể sử dụng PowerShell:
Điều tôi làm ở đây trước tiên là tìm người dùng mà tôi muốn khôi phục bằng cách sử dụng tính năng lọc Get-ADObject trên thuộc tính isDeleted để chỉ tìm kiếm các đối tượng đã xóa và tên là User1*. Khi tôi chắc chắn rằng truy vấn của mình chỉ trả về một người dùng mà tôi muốn khôi phục, tôi lặp lại lệnh tương tự chuyển nó tới Restore-ADObject.
Điều này thật tuyệt vời cho đến khi ai đó vô tình xóa toàn bộ cấu trúc OU.
Nếu tôi muốn khôi phục một đối tượng mà cha mẹ được biết đến cuối cùng không tồn tại thì sẽ hơi rắc rối khi định vị và khôi phục cha mẹ đó trước khi chính đối tượng đó có thể được khôi phục. Và nếu toàn bộ cấu trúc OU bị xóa (vâng, tôi biết cần có biện pháp bảo vệ chống lại việc vô tình xóa, nhưng đó lại là một câu chuyện hoàn toàn khác), việc khôi phục có thể là một điều khó khăn.
Đây là nơi người bạn Jimmy Andersson của tôi đã viết một kịch bản mà anh ấy đã trình diễn trong một buổi học ở Åre vào tháng 5 năm 2014.
Với sự giúp đỡ của anh ấy, tôi đã viết lại tập lệnh đó, triển khai một số phương pháp hay nhất của PowerShell, xử lý lỗi và mở rộng chức năng một chút. Tập lệnh hỗ trợ hai cách khôi phục đối tượng, bằng Danh tính hoặc bằng LastKnownRDN.
Khôi phục mọi đối tượng đã xóa trong Đơn vị tổ chức (theo Danh tính)
Nếu tôi muốn khôi phục bất kỳ đối tượng nào đã từng nằm trong OU OU=Corporate,DC=ad,DC=simonw,DC=se, chỉ cần chạy tập lệnh như thế này:
.Restore-ADTree.ps1 -Identity ‘OU=Corporate,DC=ad,DC=simonw,DC=se’ -VerboseĐể khôi phục bất kỳ đối tượng nào đã từng nằm trong bất kỳ OU phụ trực tiếp nào, tôi chỉ cần thêm tham số -IncludeLiveChildren và nếu tôi muốn xuất tất cả các đối tượng đã khôi phục, tôi thêm tham số -PassThru.
Khôi phục OU đã xóa và tất cả các đối tượng con của nó (bởi LastKownRDN)
Bây giờ, nếu tôi vô tình xóa một OU và tôi không muốn khôi phục mọi đối tượng con về cấp độ gốc của OU đó thì có một cách khác để chạy tập lệnh.
Ví dụ: giả sử tôi đã xóa các OU sau:
OU=Doanh số,OU=Doanh nghiệp,DC=quảng cáo,DC=simonw,DC=se
OU=Thị trường,OU=Doanh nghiệp,DC=quảng cáo,DC=simonw,DC=se
OU Thị trường sẽ bị xóa nhưng tôi muốn khôi phục OU Bán hàng. Dòng sau sẽ thực hiện chính xác điều đó:
Restore-ADTree.ps1 -lastKnownRDN Sales -VerboseNếu tôi có nhiều đối tượng đã xóa có LastKnownRDN là 'Sales', tôi có thể thêm tham số -lastKnownParent 'OU=Corporate,DC=ad,DC=simonw,DC=se' để chỉ khôi phục các đối tượng đã từng nằm trong OU đó và tất cả đều là trẻ em.
Tùy chọn bổ sung và trường hợp đặc biệt
Nếu một đối tượng bị xóa và một đối tượng mới được tạo bằng cùng một RDN và sau đó cũng bị xóa, tập lệnh sẽ luôn chọn đối tượng bị xóa cũ nhất (đầu tiên).
Để chỉ khôi phục các đối tượng đã bị xóa SAU một thời gian nhất định, hãy sử dụng tham số -TimeFilter.
Sử dụng tham số -WhatIf hoặc -Confirm khi không hoàn toàn chắc chắn về những gì cần khôi phục.
Toàn bộ tập lệnh có thể được tải xuống từ Phòng trưng bày Technet