كيفية الإبلاغ عن تغييرات مخطط Active Directory باستخدام PowerShell

التغييرات في مخطط Active Directory (AD) يمكن أن تؤدي إلى مشاكل تشغيلية. بشكل عام، يجب ألا يتغير المخطط. ولكن إذا تم تثبيت تطبيق جديد يعتمد على Active Directory، مثل Microsoft Exchange Server، فيجب تحديث المخطط لدعم التطبيق. لحماية سلامة AD، يجدر بك التحقق من أن تتم فقط التغييرات المعتمدة على المخطط.

من خلال PowerShell، من السهل إنشاء تقرير عن تغييرات مخطط AD. ولكن قبل تشغيل الكود في هذه المقالة، قم بتثبيت وحدة PowerShell لخدمات Active Directory في Windows Server. تم تثبيت وحدة PowerShell لخدمات Active Directory على مراقبي النطاق (DC) افتراضيًا. ولكن من الممارسات الجيدة أن تقوم بأداء المهام الإدارية اليومية من جهاز كمبيوتر يعمل بنظام Windows 10 متصل بالنطاق.

الإعلان

قم بتثبيت وحدة PowerShell لخدمات Active Directory في Windows Server

تعتبر وحدة PowerShell لخدمات AD جزءًا من أدوات إدارة الخادم عن بُعد (RSAT) لخدمات نطاق Active Directory. لتثبيت أدوات RSAT AD، افتح نافذة PowerShell بامتيازات المسؤول المحلي وقم بتشغيل الأمر التالي:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online

بمجرد تثبيت الأدوات، يمكنك إغلاق نافذة PowerShell المرتفعة. لتشغيل بقية الأوامر في هذه المقالة، يجب أن تكون مسجل الدخول إلى Windows 10 بحساب يكون عضوًا في مجموعة Active Directory ‘Domain Users’.

لمزيد من المعلومات حول تثبيت RSAT في Windows 10، انظر كيفية تثبيت أدوات إدارة الخادم عن بُعد في Windows 10 على Petri.

الإبلاغ عن تغييرات مخطط AD باستخدام PowerShell

باستخدام سطر الأوامر Get-ADObject ، يمكننا عرض تغييرات المخطط. ولكن علينا أولاً توفير سطر الأوامر Get-ADObject بقاعدة البحث ، أو بعبارة أخرى ، منطقة في الدليل للبحث فيها. نريد البحث في المخطط ، لذا نحتاج إلى معرفة سياق تسمية المخطط لدينا. لحسن الحظ ، من السهل الحصول عليه باستخدام سطر الأوامر Get-ADRootDSE. إذا قمت بتشغيل Get-ADRootDSE بدون أي معلمات ، سترى مسار الدليل لسياق تسمية المخطط schemaNamingContext في الناتج.

إعلان

Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)

 

PowerShell يسهل سحب أي خاصية ، مثل schemaNamingContext ، عن طريق استخدام نقطة وأقواس كما هو موضح أدناه:

((Get-ADRootDSE).schemanamingcontext)

يمكننا استخدام الرمز أعلاه كقيمة لمعلمة -SearchBase في سطر الأوامر Get-ADObject. ولكن هناك معلمتان أخريان نحتاج إلى إضافتهما. -SearchScope يجب تعيينه إلى OneLevel ، والذي يبحث في الكائنات الفرعية الفورية للمسار المقدم في معلمة -SearchBase. يتم استخدام علامة النجمة ، * ، كقيمة لمعلمة -Filter لإرجاع كل شيء.

أخيرًا ، نستخدم معلمة -Properties لتحديد الخصائص التي نريد إرجاعها كجزء من الناتج. كما ترى ، سأقوم بسحب objectClass ، name ، whenChanged ، و whenCreated الخصائص.

إعلان

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated

نريد تجميع البيانات المُعادة حسب التاريخ. للقيام بذلك، نحتاج إلى التاريخ whencreated بدون معلومات الوقت. يمكننا استخدام cmdlet Select-Object وخاصية حسابية لإنشاء كائن جديد بالبيانات التي نحتاجها بالصيغة الصحيحة. في الأمر الموسع أدناه، يمكنك رؤية أنني قمت بتوجيه الكائن الذي تم إنشاؤه بواسطة Get-ADObject إلى cmdlet Select-Object. @ يشير إلى خاصية محسوبة، لديها تسمية ‘Event’، وتعبير يقوم فقط بإرجاع التاريخ من خاصية whenCreated بصورة مختصرة.

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}}

ثم، سنقوم بتوجيه الكائن الذي تم إنشاؤه بواسطة Select-Object إلى Sort-Object. ونطلب منه ترتيب البيانات الكائنة حسب خاصية whenCreated.

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

وأخيرًا، دعنا نوجه الكائن إلى cmdlet Format-Table. سيعرض الخصائص في جدول، مُجمّعة حسب الحدث، الذي قمنا بإنشائه باستخدام cmdlet Select-Object.

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize

إذا قمنا بتشغيل جميع الشيفرة معًا، سنرى قائمة بالتغييرات في الهيكل تظهر في نافذة موجه الأوامر. في الدليل الخاص بي، تم تثبيت خادم Exchange، لذا يمكننا رؤية العديد من التغييرات في الهيكل.

 

Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/