ITSESA.COM บทความ Windows Server

Restore multiple deleted Active Directory objects

Restore multiple deleted Active Directory objects

คราวที่แล้วเราได้ทดลอง Restore Account แบบทีละ Account กันไปแล้ว ซึ่งเป็นกรณีที่เผลอลบผิดพลาดไปแบบไม่เยอะเท่าไหร่ แต่คราวนี้หากมีการเผลอลบ Organization Unit (OU) หายไปเลย แถมไม่ได้มีการป้องกันการลบไว้ด้วย ซึ่งจะทำให้ OU ที่อยู่ภายในและ User Account ทั้งหมดหายไปกับตา ถ้าไม่อ่านแล้วจะเสียใจนะเออ

เมื่อครั้งแรกที่เราสร้าง Organization Unit (OU) ขึ้นมา จะมีตัวเลือก Protect container from accidental deletion ซึ่งมีไว้สำหรับป้องกันความผิดพลาดจากการลบ OU ทิ้งไปโดยไม่ตั้งใจ

Protect container from accidental deletion

แต่ถึงแม้จะตั้งใจหรือไม่ตั้งใจก็ตาม เมื่อมีการลบ Object OU ออกไปจาก Active Directory แล้ว และต้องการกู้คืนกลับมาให้เหมือนเดิมมันก็ต้องมีเทคนิคกันหน่อย โดยบททดสอบนี้ผมได้จัดเตรียม OU และ Users ไว้ดังนี้

Delete Object in Active Directory

เป้าหมายของเราตอนนี้มี OULevel1 ซึ่งมี 2 Users คือ user1 และ user2 และภายในนี้ก็ยังมี OULevel2 ซ้อนอีกชั้นโดยมี usera อยู่ใน OU นี้ด้วย ปัญหาจะเกิดขึ้นก็หลังจากที่เราลบ OULevel1 ออกไปนี่แหล่ะ จะทำให้ทุก Object ที่อยู่ใน OULevel1 นั้นหายไปด้วยเช่นกัน

แล้วก็อีกเช่นเคยอย่างที่ได้เคยกล่าวไว้ในบทความก่อน ๆ Object ที่ถูกลบไปนั้นจะถูกนำไปจัดอยู่ใน Container พิเศษที่ชื่อว่า Deleted Objects ซึ่งจะยังไม่ได้ถูกลบไปจริง ๆ แต่เป็นเพียงการทำเครื่องหมายไว้เท่านั้นว่ามันถูกลบไปแล้ว ซึ่งเราควรจะทำการตรวจสอบเสียก่อนว่า Object ที่เราจะ Restore นั้นเค้าอยู่กันอย่างไร

เริ่มที่ Start > Administrative Tools > เรียก Active Directory Module for Windows PowerShell ด้วย Run as administrator

เราจะค้นหา Object ด้วยคำสั่ง Get-ADOBject โดยใช้ Parameter ldapFilter และวางเงื่อนไขการค้นหาโดยใช้ Attribute ที่เกี่ยวข้องกับตัว Object ที่ถูกลบไป ซึ่งจะเลือกใช้ Attribute msDS-lastKnownRDN โดยรูปแบบคำสั่งจะเป็นดังนี้

Get-ADObject -SearchBase "CN=Deleted Objects,DC=domain,DC=local" -ldapFilter:"(msDs-lastKnownRDN=user2)" -IncludeDeletedObjects -Properties lastKnownParent

Get-ADOBject

จากผลลัพธ์จะทำให้ทราบว่า Object user2 นี้ได้ถูกลบไปแล้วจริง ๆ ไม่ได้โม้ และเคยอยู่ใน OULevel1 มาก่อน

หลังจากการตรวจสอบอย่างง่าย ๆ แล้วพบว่าสามารถแสดงรายการของ OULevel1 ออกมาได้แล้ว คราวนี้เราจะลองค้นหารายละเอียดของ OULevel1 ที่ถูกลบไปบ้าง โดยพิมพ์คำสั่ง

Get-ADObject -SearchBase "CN=Deleted Objects,DC=domain,DC=local" -Filter {lastKnownParent -eq 'OU=OULevel1\\0ADEL:a645eeb4-cb56-463d-9742-57f9d99b8d89,CN=Deleted Objects,DC=domain,DC=local'} -IncludeDeletedObjects -Properties lastKnownParent | ft

ซึ่ง Value ของ OU นั้น ให้เรา Copy มาจากผลลัพธ์แรกได้เลย และแก้ไข \ จากเดิมให้เป็น \\ ด้วย

Search Deleted Object with Get-ADObject

ผลลัพธ์ออกมาจะเห็นว่า ภายใน OULevel1 นั้น มี Object อะไรอยู่บ้าง แต่เรายังมองไม่เห็น Object ที่อยู่ใน OULevel2 ดังนั้นเราจึงต้องใช้คำสั่งเพื่อตรวจสอบ OULevel2 ก่อน ซึ่งจากผลลัพธ์นี้ทำให้เราไม่สามารถเห็นเลข ObjectGUID ได้หมด ดังนั้นจึงต้องทำการหาเลข ObjectGUID ของ OULevel2 ด้วยคำสั่ง

Get-ADObject -SearchBase "CN=Deleted Objects,DC=domain,DC=local" -ldapFilter:"(msDs-lastKnownRDN=OULevel2)" -IncludeDeletedObjects -Properties lastKnownParent

Search Deleted Object with Get-ADObject

แล้วเอา ObjectGUID ของ OULevel2 ที่ได้ไปตรวจสอบอีกครั้งด้วยคำสั่ง

Get-ADObject -SearchBase "CN=Deleted Objects,DC=domain,DC=local" -Filter {lastKnownParent -eq 'OU=OULevel2\\0ADEL:cc59fc1a-9bd4-462b-abb2-b1229fe69c8c,CN=Deleted Objects,DC=domain,DC=local'} -IncludeDeletedObjects -Properties lastKnownParent | ft

จะทำให้ทราบว่า มี Object อะไรอยู่ภายใต้ OULevel2 อีกบ้าง

Result of Get-ADObject

พบว่ามี usera อยู่ภายใน OULevel2 อีก

เมื่อทราบโครงสร้าง Object ที่ถูกลบไปแล้วว่า มีลำดับชั้นเป็นอย่างไรบ้าง การ Restore กลับมาเราก็จะต้องทำตามลำดับขั้นเช่นเดียวกัน โดยจะต้อง Restore Object ที่อยู่บนสุดก่อน ไล่ไปจนถึง Object ที่อยู่ล่างสุด โดยจะใช้คำสั่ง Restore-ADObject เข้ามาใช้งานร่วมด้วย

Restore OULevel1

Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=OULevel1)" -IncludeDeletedObjects | Restore-ADObject

Restore Object ที่อยู่ใน OULevel1 ทั้งหมด

Get-ADObject -SearchBase "CN=Deleted Objects,DC=domain,DC=local" -Filter {lastKnownParent -eq "OU=OULevel1,DC=domain,DC=local"} -IncludeDeletedObjects | Restore-ADObject

เป็นการ Restore ทุก Object ที่ถูกลบไปอยู่ใน Container Deleted Objects ทั้งหมด ดังนั้นจึงไม่ได้มีการระบุชื่อ Users

สุดท้าย Restore OULevel2 และทุก Object ที่อยู่ใน OULevel2 มาด้วย

Get-ADObject -SearchBase "CN=Deleted Objects,DC=domain,DC=local" -Filter {lastKnownParent -eq "OU=OULevel2,OU=OULevel1,DC=domain,DC=local"} -IncludeDeletedObjects | Restore-ADObject

Restore Deleted Object to Active Directory

เสร็จแล้ว ทุก OU ละ Users กลับมาอยู่ในสภาพเดิม

Share
comments

Interest:

Last Article

mcse-windows-server-2016แนวทางการสอบ MCSE Windows Server 2016 และการสอบ MCSA Windows Server...
28/06/2017
windows-server-2016-course-onlineอบรม Windows Server คอร์สออนไลน์ภาษาไทย ก้าวสู่ System Admin กับ Windows...
06/06/2017
update-ms17-010-wannacryptอัพเดท Windows ป้องกัน WANNACRY ไวรัสเรียกค่าไถ่ WannaCrypt หรือ Wana...
15/05/2017
windows-server-2016มีอะไรใหม่ใน Windows Server 2016 แนะนำฟิเจอร์ที่น่าสนใจจาก E-book...
12/03/2017
cd-windows-failover-cluster-thaiCD สอนการติดตั้งระบบ Failover Cluster ภาษาไทย บน Windows Server 2012 R2...
16/04/2016