إنشاء تقارير باستخدام Get-AdGroupMember في PowerShell

A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember cmdlet and other cmdlets can save you a ton of time.

“تعتبر مجموعات active directory وسيلة رائعة لتقسيم حسابات المستخدمين. تسمح المجموعات للمسؤولين بتحديد وصول الموارد عبر العديد من الأنظمة.

في هذا المقال ، دعونا نستخدم powershell للحصول على أعضاء مجموعة ad وتصدير أعضاء مجموعة ad. يمكنك بعد ذلك استخدام هذه المعلومات لإنشاء العديد من التقارير المثيرة للاهتمام.

Active Directory group

إدارة وتقرير حول active directory ، exchange و microsoft 365 مع manageengine admanager plus. حمل النسخة التجريبية مجانًا!

متطلبات أولية

إذا كنت ترغب في متابعة هذا المقال ، يرجى التأكد من أن لديك المتطلبات التالية جاهزة:

  • العمل على جهاز كمبيوتر متصل بنطاق windows 10
  • تسجيل الدخول بمستخدم يمكنه قراءة مجموعات ad وحسابات المستخدمين
  • يجب أن يكون لديك وحدة powershell active directory مثبتة

تعلم الأساسيات

للاستعلام عن مجموعات ad وأعضاء المجموعة ، لديك جملتي powershell المتاحتين – get-adgroup و get-adgroupmember.”

Get-ADGroup تستعلم عن مراقب المجال وتعيد كائنات مجموعة AD. Get-AdGroupMember تبحث داخل كل مجموعة وتعيد جميع حسابات المستخدمين والمجموعات وجهات الاتصال والكائنات الأخرى التي توجد في تلك المجموعة.

الحصول على مجموعات AD

للعثور على مجموعات AD باستخدام PowerShell ، يمكنك استخدام cmdlet Get-ADGroup. بدون معلمات ، ستستعلم Get-ADGroup AD وتعيد جميع المجموعات في مجال باستخدام معلمة Filter. معلمة Filter مطلوبة. إنها موجودة لتقييد المجموعات المعادة استنادًا إلى معايير مختلفة.

على سبيل المثال ، للعثور على جميع المجموعات دون مراعاة أي معايير ، استخدم  Get-ADGroup وحدد علامة الاسترسال (نجمة) لمعلمة Filter. يمكنك رؤية مثال أدناه. قد يستغرق التمرير من خلال جميع هذه المجموعات وقتًا إذا كان لديك مئات أو حتى آلاف في مجالك.

Get-ADGroup -Filter *

إذا كنت بحاجة إلى العثور على مجموعة واحدة ، يمكنك استخدام معلمة Identity.

معلمة Identity هي معلمة شائعة بين جميع cmdlets PowerShell Active Directory. يتيح لك تقييد استعلامك إلى كائن AD واحد. على سبيل المثال ، إذا كنت بحاجة للتحقق مما إذا كانت هناك مجموعة تسمى HR موجودة ، يمكنك معرفة ذلك عن طريق تشغيل الأمر أدناه.

Get-ADGroup -Identity 'HR'

الحصول على أعضاء مجموعة AD مع Get-AdGroupMember

استخدام PowerShell لعرض أعضاء مجموعة AD يتطلب cmdlet Get-ADGroupMember. يحصل هذا الأمر على مستخدمين ومجموعات وكائنات كمبيوتر في مجموعة معينة. ربما تحتاج إلى العثور على جميع أعضاء مجموعة المسؤولون. في أبسط صورتها، ستستخدم معلمة Identity مرة أخرى محددة اسم المجموعة كما هو موضح أدناه.

Get-ADGroupMember -Identity 'Administrators'

لاحظ أن Get-AdGroupMember يعيد فقط عضوية المجموعة للمستخدمين والمجموعات والكمبيوترات. لن يعيد كائنات AD الأخرى مثل جهات الاتصال.

تعداد أعضاء المجموعة داخل أعضاء المجموعة

كما قد تعلم، تحتوي مجموعات AD ليس فقط على حسابات المستخدمين ولكن أيضًا على مجموعات أخرى تُسمى أيضًا تضمين. عندما تكون مجموعة مدرجة داخل مجموعة أخرى، يرث أعضاء تلك المجموعة نفس الأذونات المخصصة للمجموعة الأم.

بشكل افتراضي، لا يعيد cmdlet PowerShell Get-AdGroupMember أعضاء المجموعات المتداخلة. لمعالجة ذلك، يمكنك استخدام معلمة Recursive. على سبيل المثال، يمكنك العثور على أعضاء المجموعات المتضمنة داخل مجموعة الموارد البشرية باستخدام معلمة Recursive كما هو موضح أدناه.

Get-ADGroupMember -Identity 'HR' -Recursive

الحصول على مجموعات/أعضاء متعددة في وقت واحد

إذا كنت بحاجة إلى الاستعلام عن AD لعدد كبير من المجموعات أو أعضاء المجموعات في وقت واحد، يمكنك أيضًا القيام بذلك باستخدام حلقة الـ PowerShell foreach. تقوم حلقة foreach بتشغيل أمر أو كود لكل عنصر في مجموعة. في هذه الحالة، ستكون تلك المجموعة قائمة بأسماء المجموعات.

ربما تحتاج إلى العثور على جميع أعضاء المجموعة في مجموعات الموارد البشرية، المحاسبة، و تقنية المعلومات. للقيام بذلك، ستقوم أولاً بإنشاء مجموعة أو مصفوفة من أسماء هذه المجموعات. يحدد المثال أدناه هذه المجموعة بوصفها $groupNames. ثم، لكل اسم في تلك المجموعة، قم بتشغيل Get-ADGroupMember وتوفير اسم كل مجموعة لمعلمة Identity.

$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
    Get-ADGroupMember -Identity $group
}

يمكنك بدلاً من ذلك استخدام ForEach-Object cmdlet لتكرار المجموعات.

استخدام بيانات الاعتماد البديلة

مثل العديد من سائر أوامر PowerShell، تحتوي أوامر AD group cmdlets على معلمة Credential. بشكل افتراضي، عند تشغيل أمر AD group cmdlet، يستخدم بيانات الاعتماد الخاصة بك لتحقيق الاتصال بدليل Active Directory. يتطلب هذا السلوك أن تكون على جهاز متصل بالنطاق مسجل الدخول كمستخدم Active Directory لديه الإذن.

ولكن ماذا لو كنت على جهاز عمل جماعي أو تحتاج إلى المصادقة على AD كمستخدم مختلف؟ في هذه الحالة، يمكنك استخدام معلمة Credential. تتيح لك هذه المعلمة تحديد اسم مستخدم وكلمة مرور لاستخدامها في عملية المصادقة.

على سبيل المثال، ربما لا يكون لحساب المستخدم الخاص بك الحق في أداء مهمة AD. لديك حساب خدمة بحقوق إضافية. يمكنك تسجيل الدخول كمستخدم عادي ومع ذلك المصادقة بحساب الخدمة كما هو موضح أدناه.

أمر Get-Credential يطلب اسم مستخدم/كلمة مرور لإنشاء اعتماد. يتم تمرير هذا الاعتماد بعد ذلك إلى أمر Get-AdGroup للمصادقة.

Get-ADGroup -Identity 'HR' -Credential (Get-Credential)

معلمة Credential هي عالمية في PowerShell لتوفير اعتمادات المصادقة. لمزيد من المعلومات، اقرأ استخدام أمر PowerShell Get-Credential وكل شيء عن الاعتمادات.

الحصول على أعضاء المجموعة باستخدام Get-ADGroup؟

قد يبدو الأمر متناقضًا ولكن يمكنك أيضًا الحصول على أعضاء المجموعة باستخدام أمر Get-ADGroup أيضًا.

يتضح أن Get-ADGroup يُرجع خاصية تسمى members لكل مجموعة. هذه مجموعة من كائنات AD التي هي أعضاء في المجموعة.

على سبيل المثال، للعثور على أعضاء المجموعة في تلك المجموعة HR مرة أخرى دون استخدام Get-ADGroupMember، يمكنك القيام بشيء مثل هذا:

Get-ADGroup -Identity 'HR' -Properties members

لماذا استخدام هذه الطريقة عوضاً عن الأخرى؟ الفرق الرئيسي هو أن خصائص members تحتوي على جميع أنواع الكائنات النشطة – ليس فقط المستخدمين والكمبيوترات والمجموعات الأخرى.

ربما لديك جهات اتصال داخل مجموعات مختلفة. عند تشغيل Get-ADGroupMember، لن تظهر تلك الجهات الاتصال. ولكن إذا قلت Get-ADGroup بإرجاع جميع الأعضاء في تلك المجموعة مع توسيع تلك المجموعة كما هو موضح أدناه، سترى الجهات الاتصال.

Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty members

العثور على سمات AD محددة

في القسم الأساسي أعلاه، كنت ببساطة تقوم بإرجاع كافة المجموعات وأعضاء المجموعات. المعلومات المُرجعة لكل مجموعة وعضو في المجموعة هي فقط جزء من السمات المرتبطة بكل نوع من الكائن.

ربما ترغب في رؤية عنوان بريد الكتروني لحساب مستخدم، تاريخ آخر تسجيل دخول، أو سمة AD مرتبطة أخرى؟ للقيام بذلك، ستحتاج إلى أن تكون مبدعاً.

ربما تمكنت من العثور على جميع أعضاء المجموعة في HR ولكنك بحاجة أيضاً لرؤية عنوان بريد كل حساب مستخدم؟

$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}

تصفية النتائج

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

المعلمة Filter

كما ذكرت سابقاً، تحتوي كلتا الأداتين على المعلمة Filter. تسمح هذه المعلمة لك بتحديد ما يتم إرجاعه بطرق متعددة خارج نطاق هذا المقال.

باستخدام معلمة Filter، يمكنك تقييد النتائج حسب أي سمة AD مثل الاسم، نوع المجموعة، عنوان البريد الإلكتروني، آخر تسجيل دخول للمستخدمين وما إلى ذلك.

على سبيل المثال، ربما ترغب في العثور فقط على مجموعات الأمان. في هذه الحالة، ستحدد سمة GroupCategory وتضع شرطًا لضمان عودة فقط مجموعات Security.

Get-ADGroup -Filter 'GroupCategory -eq "Security"'

ربما ترغب في العثور على جميع مجموعات الأمان ولكن يجب أن لا تكون مجموعات محلية للنطاق. في هذه الحالة، ستضيف شرطًا آخر (هذه المرة باستخدام المشغل -ne) لمنع عودة أي مجموعات محلية للنطاق.

Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

إذا كنت ترغب في تعلم كيفية إنشاء عوامل تصفية الاستعلام، تأكد من مراجعة تعلم تصفية Active Directory و LDAP في PowerShell.

تقييد نتائج المجموعة حسب الوحدة التنظيمية (OU)

ربما لديك مجموعات مختلفة متداخلة في وحدات تنظيمية. قد لا ترغب بالضرورة في العثور على جميع المجموعات ولكن فقط المجموعات في وحدة تنظيمية معينة. في هذه الحالة، يمكنك استخدام معلمة SearchBase.

تسمح معلمة SearchBase لك بتحديد اسم توثيق OU (DN) لبدء البحث عن المجموعات فيه. على سبيل المثال، ربما لديك OU تسمى المواقع في جذر النطاق الخاص بك. في OU المواقع، لديك كل OU موقع مثل أوستن، نيويورك، و لوس أنجلوس. أنت تبحث فقط عن المجموعات في OU نيويورك وتحتاج إلى تقييد رؤية الآخرين.

يتم عرض هيكل OU AD مثاليًا أدناه. لاحظ أن مجموعات أخرى موجودة خارج OU المواقع.

company.local
- Locations
  - Austin
  - NYC
    - Group 1
    - Group 2
  - Los Angeles
- Computers
  - Group 3
  - Group 4
- Service Accounts

ربما تحتاج إلى العثور على جميع مجموعات AD التي توجد فقط في وحدة التنظيم NYC. لتقييد الاستعلام، ستستخدم المعلمة SearchBase وتقديم DN كما هو موضح أدناه. يتم إرجاع جميع المجموعات داخل وحدة التنظيم المواقع.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'

لكن الآن تحتاج إلى العثور على كل المجموعات في جميع وحدات التنظيم تحت وحدة التنظيم المواقع. Get-ADGroup يعيد فقط المجموعات في وحدة التنظيم المواقع نفسها – وليس في وحدات التنظيم الفرعية.

لإرجاع المجموعات داخل وحدات التنظيم الفرعية، ستحتاج إلى استخدام معلمة SearchScope. هذه المعلمة مشابهة لمعلمة Recursive في أنها ستفحص الكائنات الفرعية أيضًا.

على سبيل المثال، للعثور على جميع المجموعات في أي وحدة تنظيم تحت وحدة التنظيم المواقع، حدد Subtree أو 2. يخبر هذا القيمة لمعلمة SearchScope Get-ADGroup بالنظر بشكل متكرر إلى جميع الأطفال والأحفاد والوحدات التنظيمية الأخرى.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2

للحصول على فهم كامل لخيارات معلمة SearchScope، راجع وثائق Get-ADGroup.

تصدير مجموعات AD وأعضائها

لقد عرفت أخيرًا كيفية الاستعلام وإرجاع المجموعات وأعضاء المجموعات التي تحتاج إليها. يتم إرسال كل هذه المعلومات إلى وحدة التحكم PowerShell. ولكن الآن تحتاج إلى الحصول على هذه المعلومات في ملف CSV أو جدول بيانات Excel.

الشيء الوحيد الذي تحتاج إليه الآن هو إرسال كل تلك المعلومات إلى ملف.

التصدير إلى ملف CSV

أحد الأشكال الشائعة لتصدير معلومات AD إلى هو ملف CSV. تحتوي PowerShell على أداة مفيدة تسمح لك بإنشاء ملفات CSV بسهولة من إخراج PowerShell تسمى Export-Csv.

يمكنك إنشاء ملف CSV من أي أمر مشمول في هذه المقالة عن طريق توجيهه إلى Export-Csv. باستخدام المثال أدناه، سيقوم بإعادة توجيه جميع الإخراج الذي كان سيعود به Get-AdGroup إلى وحدة التحكم، إلى ملف CSV بدلاً من ذلك.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformation

لمزيد من المعلومات حول هذا الأداة المفيدة، تفضل بزيارة Export-Csv: الطريقة في PowerShell لمعاملة ملفات CSV كمواطنين من الدرجة الأولى.

يمكنك أيضًا تصدير النتائج بسهولة إلى CSV عبر أمر Get-AdGroupMember.

التصدير إلى Excel

PowerShell ليس لديه طريقة أصلية لتصدير المعلومات إلى Excel. ولكن يمكنك دائمًا تنزيل الوحدة المجتمعية المجانية المسماة ImportExcel. توفر هذه الوحدة قدرات تصدير شبيهة بـ CSV مباشرة إلى أوراق عمل Excel. لتثبيت وحدة PowerShell، قم بتشغيل Install-Module ImportExcel -Scope CurrentUser.

باستخدام المثال أعلاه، بدلاً من ملف CSV، إذا كنت بحاجة إلى تصدير المجموعات إلى ورقة عمل Excel، فستستخدم أمر Export-Excel كما هو موضح أدناه.

العثور على كلمات مرور تسربت وغير آمنة في النشاط الخاص بك في Active Directory عن طريق التحقق من قائمة كلمات المرور NCSC.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'

الوحدة ImportExcel لديها الكثير من الوظائف للعمل مع Excel. إذا كنت بحاجة إلى ورقة عمل أكثر تطورًا، فمن المحتمل أن تحتوي على وظيفة لك.

لمزيد من المعلومات حول استخدام وحدة ImportExcel، اقرأ هذا المقال. يقدم مقدمة رائعة لبعض الحالات الشائعة التي يمكنها التعامل معها.

إدارة وتقرير دليل النشاط وExchange وMicrosoft 365 باستخدام ManageEngine ADManager Plus. قم بتنزيل النسخة التجريبية المجانية!

الختام

باستخدام أمرين فقط في PowerShell، يمكنك القيام بأي شيء تقريبًا مع مجموعات AD. كان هذا المقال مجرد مقدمة للوظائف المتاحة لك. استخدم المعرفة التي تم جمعها هنا، واتبع بعض الروابط للانغماس في مواضيع أعمق في المقال وشاهد ما يمكنك بناؤه!

Source:
https://adamtheautomator.com/get-adgroupmember/