كيف يمكن الحصول على قائمة بالمجموعات الإعلانية المحددة التي تضم قائمة كبيرة من المستخدمين أعضاءً فيها؟ استخدام Get-ADUser للحصول على معلومات متنوعة حول مستخدمي مجال AD.

09.07.2019

ليس سراً أنه منذ الإصدار الأول من PowerShell، تحاول Microsoft جعله الأداة الرئيسية لإدارة Windows. وفي العديد من الطرق ينجح الأمر! اليوم، وباستخدام أمثلة بسيطة، سنعرض إمكانيات PowerShell التي يمكن استخدامها للحصول على معلومات متنوعة حول مستخدمي Active Directory وسماتهم.

ملحوظة. في السابق، للحصول على معلومات حول سمات حسابات مستخدمي AD، كان عليك استخدام أدوات متنوعة: وحدة تحكم ADUC (بما في ذلك)، والأداة المساعدة، وما إلى ذلك. يعتمد اختيار الأداة عادةً على المهمة المطروحة وقدرات المسؤول البرمجية.

قدم PowerShell 2.0 وحدة نمطية خاصة للعمل مع Active Directory - (تم تقديمها في Windows Server 2008 R2)، والتي تسمح لك أوامر cmdlets الخاصة بها بإجراء عمليات معالجة مختلفة باستخدام كائنات دليل AD. يتم استخدام أمر cmdlet للحصول على معلومات حول مستخدمي مجال Active Directory وخصائصهم الحصول على ADUser. يمكنك استخدام Get-ADUser cmdlet للحصول على قيمة أي سمة لحساب مستخدم موجود في AD. بالإضافة إلى ذلك، يمكنك تحديد معايير اختيار متنوعة وإنشاء قوائم بمستخدمي المجال وسماتهم.

في هذا المثال، سنوضح لك كيفية استخدام أمر PowerShell Get-ADUser cmdlet لاسترداد معلومات حول آخر مرة تم فيها تغيير كلمة مرور المستخدم ومتى تنتهي صلاحيتها.

قم بتشغيل نافذة Powershll بحقوق المسؤول وقم باستيراد وحدة Active Directory باستخدام الأمر:

الدليل النشط لوحدة الاستيراد

نصيحة. في Windows Server 2012 والإصدارات الأحدث، يمكنك تخطي هذا العنصر، حيث يتم تمكين وحدة PowerShell Active Directory افتراضيًا.

في أنظمة تشغيل العميل (Windows 10 على سبيل المثال)، لكي يعمل أمر Get-AdUser، تحتاج إلى تثبيت الإصدار المناسب من RSAT وتمكين المكون في لوحة التحكم وحدة الدليل النشط لنظام التشغيل Windows PowerShell(أدوات إدارة الخادم البعيد -> أدوات إدارة الأدوار -> أدوات AD DS وAD LDS -> أدوات AD DS).

يمكن الحصول على قائمة كاملة بجميع وسيطات Get-ADUser cmdlet على النحو التالي:

مساعدة في الحصول على ADUser

لعرض قائمة بجميع حسابات المجال، قم بتشغيل الأمر:

الحصول على ADUser -filter *

تنسيق القائمة التي تم إرجاعها ليس مناسبًا جدًا للاستخدام، حيث يتم عرض 10 فقط من بين أكثر من 120 سمة وخصائص لحسابات المستخدمين (DN، SamAccountName، Name، UPN، وما إلى ذلك) بالإضافة إلى ذلك، نرى أن هناك لا توجد معلومات حول وقت آخر تغيير لكلمة المرور.

لعرض معلومات كاملة حول جميع السمات المتاحة لمستخدم المستخدم، قم بتشغيل الأمر:

الحصول على ADUser -هوية المستخدم -خصائص *

لذلك، نرى قائمة كاملة بسمات مستخدم AD وقيمها المرتبطة بحساب المستخدم. بعد ذلك، سننتقل إلى تنسيق مخرجات Get-ADUser cmdlet بحيث يتم عرض الحقول التي نحتاجها. نحن مهتمون بالصفات:

  • انتهت كلمة المرور
  • كلمة المرورLastSet
  • كلمة المرور لا تنتهي أبدًا

لننفذ الأمر:

احصل على ADUser tuser -خصائص كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي صلاحيتها

تحتوي الآن بيانات المستخدم على معلومات حول تاريخ تغيير كلمة المرور والوقت الذي ستنتهي فيه صلاحيته. دعونا نقدم المعلومات في شكل جدول أكثر ملاءمة:

Get-ADUser -filter * -properties كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي | قدم الاسم، كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي صلاحيتها

لعرض بيانات المستخدم من وحدة تنظيمية محددة، استخدم المعلمة قاعدة البحث:

Get-ADUser -SearchBase 'OU=Moscow,DC=winitpro,DC=loc' -تصفية * -خصائص كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا ينتهي الأمر | قدم الاسم، كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي صلاحيتها

يمكن تصدير نتيجة الأمر إلى ملف نصي:

Get-ADUser -filter * -properties كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي | قدم الاسم، كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي > C:\temp\users.txt

أو بتنسيق CSV، والذي سيتم تصديره بسهولة إلى Excel في المستقبل (بالإضافة إلى استخدام كائن فرزلنقم بفرز الجدول حسب العمود "PasswordLastSet"، وإضافة شرط أيضًا أين– يجب أن يحتوي اسم المستخدم على السلسلة “Dmitry”):

Get-ADUser -filter * -properties كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي | حيث ($_.name –مثل “*ديمتري*”) | فرز كائن كلمة المرورLastSet | حدد اسم الكائن، وPasswordExpired، وPasswordLastSet، وPasswordNeverExpires | تصدير-csv -المسار c:\temp\user-password-expires-2015.csv

وبالتالي، يمكنك إنشاء جدول يتضمن أي سمات مستخدم Active Directory ضرورية.

للحصول على قائمة بحسابات مستخدمي AD بناءً على خاصية محددة، استخدم المعلمة –Filter. كوسيطات لهذه المعلمة، يمكنك تحديد قيمة سمات مستخدم Active Directory معينة، مما سيؤدي إلى تطبيق Get-ADUser cmdlet على المستخدمين الذين يطابقون معايير التصفية.

إخراج مستخدمي AD الذين تبدأ أسماؤهم بالرومانية:

Get-ADUser -filter (الاسم -مثل "Roman*")

Get-ADUser -Filter (SamAccountName -like "*") | كائن القياس

قائمة بجميع الحسابات النشطة (غير المحظورة) في AD:

Get-ADUser -Filter (ممكّن -eq "True") | حدد كائن SamAccountName، الاسم، اللقب، الاسم المعطى | تنسيق الجدول

قائمة الحسابات ذات كلمة المرور منتهية الصلاحية:

الحصول على ADUser - عامل التصفية (ممكّن -eq $True) - خصائص كلمة المرور منتهية الصلاحية | حيث($_.كلمة المرور منتهية الصلاحية)

قائمة الحسابات النشطة التي لها عناوين بريد إلكتروني:

Get-ADUser -Filter ((mail -ne "null") - و (Enabled -eq "true")) - خصائص اللقب، الاسم المعطى، البريد | حدد اسم الكائن، اللقب، الاسم المعطى، البريد | تنسيق الجدول

المهمة: للحصول على قائمة الحسابات المخزنة في ملف نصي (حساب واحد في كل سطر)، تحتاج إلى الحصول على رقم هاتف المستخدم في AD وتحميل المعلومات إلى ملف نصي بتنسيق CSV (يمكن استيراده بسهولة إلى Esxel).

استيراد-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -اسم الخصائص، رقم الهاتف | حدد الاسم، رقم الهاتف | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8)

يتيح لك المثال التالي تنزيل دفتر عناوين المؤسسة كملف CSV، والذي يمكن استيراده لاحقًا إلى Outlook أو Mozilla Thunderbird:

Get-ADUser -Filter ((mail -ne "null") - و (Enabled -eq "true")) - خصائص اللقب، الاسم المعطى، البريد | حدد اسم الكائن، اللقب، الاسم المعطى، البريد | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter"، "$env:temp\mail_list.csv

المستخدمون الذين لم يغيروا كلمة المرور الخاصة بهم خلال آخر 90 يومًا:

$90_Days = (Get-Date).adddays(-90) Get-ADUser -filter ((passwordlastset -le $90_days))

$user = Get-ADUser winadmin -خصائص الصورة المصغرة $user.thumbnailPhoto | ضبط المحتوى winadmin.jpg - بايت التشفير

قائمة المجموعات التي ينتمي إليها حساب المستخدم

احصل على AdUser winadmin - خصائص عضو | حدد عضوًا في - توسيع الملكية عضوًا في

في هذه المقالة، سنلقي نظرة على قدرة PowerShell على إدارة مجموعات مجال Active Directory. سننظر في كيفية إنشاء مجموعة جديدة في AD، وإضافة مستخدمين إليها (أو إزالتها)، وسرد مستخدمي المجموعة، والعديد من الإجراءات المفيدة الأخرى مع مجموعات المجال التي تكون مفيدة للغاية في الإدارة اليومية. لإدارة المجموعات الإعلانية، توفر وحدة Active Directory PowerShell أوامر cmdlets الأساسية التالية:

لاستخدام أوامر cmdlets هذه في جلسة PowerShell الخاصة بك، يجب تحميل وحدة تفاعل AD خاصة - وحدة الدليل النشط لنظام التشغيل Windows PowerShell. تم تقديم هذه الوحدة لأول مرة في Windows Server 208 R2. في Windows Server 2012 والإصدارات الأحدث، يتم تمكين هذه الوحدة بشكل افتراضي. وعلى أجهزة الكمبيوتر العميلة، يمكن تثبيته وتمكينه كأحد مكونات RSAT. يمكنك التحقق مما إذا تم تحميل الوحدة بهذه الطريقة:

الحصول على الوحدة النمطية - القائمة المتاحة

كما ترى، تم تحميل وحدة ActiveDirectory. إذا لم يكن الأمر كذلك، قم باستيراده باستخدام الأمر:

الدليل النشط لوحدة الاستيراد

يمكن الحصول على القائمة الكاملة لأوامر الوحدة النمطية على النحو التالي:

الحصول على الأوامر -الوحدة النمطية ActiveDirectory

يوجد إجمالي 147 أمر cmdlets متاحًا في الوحدة، منها 11 يمكن أن تعمل مع المجموعات.

الحصول على الأوامر - الوحدة النمطية ActiveDirectory - الاسم "*المجموعة*"

وهنا قائمتهم:

  • إضافة ADPrincipalGroupMembership
  • الحصول على ADAccountAuthorizationGroup
  • احصل على ADGroup
  • الحصول على ADGroupMember
  • الحصول على عضوية ADPrincipalGroup
  • مجموعة إعلانية جديدة
  • إزالة-ADGroup
  • إزالة-ADPrincipalGroupMembership
  • مجموعة ADGroup

لنقم بإنشاء مجموعة جديدة في حاوية Active Directory (OU) المحددة باستخدام الأمر مجموعة إعلانية جديدة:

مجموعة ADGroup الجديدة "TestADGroup" - المسار "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupScope Global -PassThru –Verbose

باستخدام السمة وصفيمكنك تحديد وصف للمجموعة، واستخدام اسم العرضتغيير اسم العرض.

معامل نطاق المجموعةيمكنك تحديد أحد أنواع المجموعات التالية:

  • 0 = المجال المحلي
  • 1 = عالمي
  • 2 = عالمي

يمكنك إنشاء مجموعة توزيع مثل هذا:

مجموعة ADGroup الجديدة "TestADGroup-Distr" - المسار "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -توزيع فئة المجموعة -GroupScope Global -PassThru –Verbose

Add-AdGroupMember – إضافة مستخدمين إلى مجموعة إعلانية

يمكنك إضافة مستخدمين إلى مجموعة Active Directory باستخدام Add-cmdlet عضو المجموعة الإعلانية. دعونا نضيف مستخدمين إلى المجموعة الجديدة:

إضافة-AdGroupMember -اختبار الهوية ADGroup -الأعضاء user1، user2

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

تنسيق ملف CSV هو كما يلي (قائمة المستخدمين، واحد لكل سطر، اسم العمود - المستخدمون)

استيراد-CSV .\users.csv -رأس المستخدمين | ForEach-Object (إضافة-AdGroupMember -هوية 'TestADGroup' -أعضاء $_.users)

للحصول على جميع أعضاء مجموعة واحدة (المجموعة أ) وإضافتهم إلى مجموعة أخرى (المجموعة ب)، استخدم هذا الأمر:

الحصول على ADGroupMember "GroupA" | احصل على ADUser | ForEach-Object(Add-ADGroupMember -هوية "Group-B" -Members$_)

إذا كنت بحاجة إلى نسخ أعضاء جميع المجموعات المتداخلة إلى مجموعة جديدة (بشكل متكرر)، فستحتاج إلى استخدام الأمر التالي:

Get-ADGroupMember -هوية "GroupA" -Recursive | احصل على ADUser | ForEach-Object(Add-ADGroupMember -هوية "GroupB" -Members$_)

Remove-ADGroupMember – إزالة المستخدمين من المجموعة

لإزالة مستخدمين من مجموعة إعلانية، يجب عليك استخدام الأمر Remove-ADGroupMember. لنقم بإزالة مستخدمين اثنين من المجموعة:

إزالة-ADGroupMember -اختبار الهوية ADGroup -الأعضاء user1، user2

تأكيد إزالة المستخدمين من المجموعة:

إذا كنت بحاجة إلى إزالة مستخدمين من مجموعة وفقًا لقائمة من ملف CSV، فاستخدم هذا الأمر:

استيراد-CSV .\users.csv -رأس المستخدمين | ForEach-Object (إزالة-ADGroupMember -هوية 'TestADGroup' -أعضاء $_.users)

Get-ADGroup – احصل على معلومات حول مجموعة إعلانية

سيساعدك أمر cmdlet في الحصول على معلومات حول المجموعة احصل على ADGroup:

الحصول على مجموعة إعلانية "TestADGroup"

يعرض هذا الأمر معلومات حول السمات الرئيسية للمجموعة (DN، نوع المجموعة، الاسم، SID). لعرض قيمة جميع سمات مجموعة المجال AD، قم بتشغيل الأمر التالي:

الحصول على-ADGroup "TestADGroup" -خصائص *

كما ترون، يتم الآن عرض سمات مثل وقت إنشاء المجموعة وتعديلها، والوصف، وما إلى ذلك.

باستخدام أمر Get-ADGroup cmdlet، يمكنك العثور على جميع المجموعات التي تهتم بها باستخدام نمط معين. على سبيل المثال، تحتاج إلى البحث عن جميع المجموعات الإعلانية التي تحتوي أسماؤها على العبارة مدراء :

احصل على ADGroup -LDAPFilter "(الاسم=*المسؤولين*)" | تنسيق الجدول

Get-ADGroupMember - عرض قائمة بمستخدمي المجموعة الإعلانية

عرض قائمة بمستخدمي المجموعة:

الحصول على ADGroupMember "TestADGroup"

لترك أسماء المستخدمين فقط في النتائج، قم بتشغيل:

الحصول على ADGroupMember "TestADGroup"| اسم قدم

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

Get-ADGroupMember 'server-admins' -recursive| ft name

لتصدير قائمة الحسابات التي تنتمي إلى مجموعة معينة إلى ملف CSV (لاستخدامها لاحقًا في Excel)، قم بتشغيل الأمر التالي:

Get-ADGroupMember 'server-admins' -recursive| ft samaccountname| Out-File c:\ps\admins.csv

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

Get-ADGroupMember -مسؤولو الخادم - الهوية - متكرر | foreach ( Get-ADUser $_ - عنوان الخصائص، OfficePhone|Select-Object title، OfficePhone)

(احصل على ADGroupMember -هوية "مسؤولي المجال").العدد

اتضح أنه في مجموعة "مسؤولي المجال" لدينا 7 حسابات مسؤول.

للعثور على قائمة بالمجموعات الفارغة في وحدة تنظيمية محددة، استخدم هذا الأمر:

Get-ADGroup -Filter * -خصائص الأعضاء -searchbase "OU=Moscow,DC=corp,dc=winitpro,DC=ru" | حيث (-وليس $_.أعضاء) | حدد الاسم

في التعليقات على المقالة السابقة، تذكرنا المحاسبة في Excel بدلاً من 1C. حسنًا، دعنا نتحقق من مدى معرفتك لبرنامج Excel. سأوضح لك اليوم كيفية الحصول على البيانات من Active Directory والعمل معها بدون وحدات ماكرو وPowerShell - فقط باستخدام آليات Office القياسية. على سبيل المثال، يمكنك بسهولة الحصول على تحليلات حول استخدام نظام التشغيل في مؤسستك إذا لم يكن لديك بالفعل شيء مثل Microsoft SCOM. حسنًا، أو فقط قم بالإحماء وصرف عقلك عن النصوص.


بالطبع، يمكنك الحصول على البيانات كما في الأمثلة أدناه حرفيًا باستخدام سطر واحد في PowerShell. ولكن، أولا، PowerShell مملة للغاية، وثانيا، يمكن لبرنامج Excel تحديث البيانات ديناميكيا - يمكن نشر المستندات الناتجة عبر الإنترنت ونسيان تحديثها.

للعمل مع البيانات، سأستخدم آلية Power Query. بالنسبة لـ Office 2010 و2013، سيتعين عليك تثبيت مكون إضافي؛ يحتوي Microsoft Office 2016 بالفعل على هذه الوحدة المدمجة. لسوء الحظ، الإصدار القياسي لا يكفي بالنسبة لنا، وسوف نحتاج إلى الإصدار الاحترافي.


تم تصميم الآلية نفسها لتلقي البيانات ومعالجتها من مجموعة متنوعة من المصادر - بدءًا من ملفات ODBC القديمة والملفات النصية وحتى Exchange وOracle وFacebook. تمت بالفعل كتابة المزيد من التفاصيل حول الآلية ولغة البرمجة النصية المضمنة "M" على حبري، ولكنني سألقي نظرة على بعض الأمثلة لاستخدام Power Query للحصول على البيانات من Active Directory.

الإحماء: دعونا نرى متى قام المستخدمون بتسجيل الدخول

يتم إنشاء الطلب إلى قاعدة بيانات المجال نفسها في علامة التبويب "البيانات - طلب جديد - من مصادر أخرى - من Active Directory".



حدد مصدر البيانات.


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



نقوم بإعداد طلب ونعجب بالمعاينة.


يجب عليك إعداد الطلب مسبقًا من خلال النقر على زر "تعديل" واختيار الأعمدة المطلوبة. في الأساس، هذه الأعمدة عبارة عن فئات، ويحتوي كل منها على مجموعة من السمات المحددة لكائن Active Directory، باستثناء العمود الرئيسي اسم العرض، والتي هي في حد ذاتها سمة. سأركز على الفصول الدراسية مستخدم, شخص, قمةو SecurityPrincipal. أنت الآن بحاجة إلى تحديد السمات الضرورية من كل فئة باستخدام "الملحق" - رمز به سهمين في رأس العمود:

  • فصل مستخدمتوسيع عن طريق الاختيار lastLogonTimestampو التحكم في حساب المستخدم;
  • الخامس شخصدعنا نختار رقم هاتف;
  • الخامس قمةمتى تم الإنشاء;
  • و في SecurityPrincipalSamAccountName.


نحن نوسع الطلب.


لنقم الآن بإعداد عامل التصفية: على وجه الخصوص، لكي لا يتم حظر الحسابات، يجب أن تحتوي سمة userAccountControl على قيمة 512 أو 66048. قد يكون عامل التصفية مختلفًا في بيئتك. يمكنك قراءة المزيد حول السمة في وثائق Microsoft.



تطبيق مرشح.


في بعض الأحيان، يكتشف Excel بشكل غير صحيح تنسيق البيانات، وخاصة قيمة السمة lastLogonTimestamp. إذا أصابتك هذه المحنة فجأة، فيمكنك تعيين التنسيق الصحيح في علامة التبويب "تحويل".

يجب الآن حذف عمود userAccountControl - وليس هناك حاجة إليه على الإطلاق في الشاشة. وانقر على "تنزيل وإغلاق".


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


يتم تكوين التحديث التلقائي عند فتح جدول أو عند انتهاء المهلة في علامة التبويب "البيانات" في "الخصائص".



إعداد تحديث البيانات.


بعد اكتمال إعداد التحديث، يمكنك تسليم الجدول بأمان إلى قسم شؤون الموظفين أو خدمة الأمن - دعهم يعرفون من قام بتسجيل الدخول إلى النظام ومتى.


رمز الطلب باللغة "M" موجود تحت المفسد.

Let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"فئات الكائنات"], user1 = domain.ru(), #"الأعمدة البعيدة" = Table.RemoveColumns(user1,( "organizationalPerson"، "shadowAccount"، "posixAccount"، "msExchOmaUser"، "msExchBaseClass"، "msExchIMRecipient"، "msExchCertificateInformation"، "msExchMultiMediaUser"، "msExchMailStorage"، "msExchCustomAttributes"، "mailRecipient"، "distinguishedName"))، #"العنصر الموسع SecurityPrincipal" = Table.ExpandRecordColumn(#"إزالة الأعمدة"، "securityPrincipal"، ("sAMAccountName")، ("sAMAccountName"))، #"العنصر الموسع العلوي" = Table.ExpandRecordColumn(#"العنصر الموسع SecurityPrincipal "، "top"، ("whenCreated")، ("whenCreated"))، #"شخص العنصر الموسع" = Table.ExpandRecordColumn(#"العنصر الموسع العلوي"، "person"، ("رقم الهاتف")، ("رقم الهاتف" ")))، #"مستخدم العنصر الموسع" = Table.ExpandRecordColumn(#"شخص العنصر الموسع"، "user"، ("lastLogonTimestamp"، "userAccountControl")، ("lastLogonTimestamp"، "userAccountControl"))، #"Rows مع تطبيق عامل التصفية" = Table.SelectRows(#"عنصر المستخدم الموسع"، كل ( = 512 أو = 66048)))، #"النوع المتغير" = Table.TransformColumnTypes(#"تم تطبيق الصفوف مع عامل التصفية"،(("lastLogonTimestamp"، اكتب التاريخ والوقت)))، #"الأعمدة البعيدة1" = Table.RemoveColumns(#"النوع المتغير"،("userAccountControl")) في #"الأعمدة البعيدة1"

إنشاء دفتر عناوين، أو ما يجب فعله عندما لا تكون بوابة الشركة متوافقة مع AD

هناك خيار آخر لاستخدام Excel مع Active Directory وهو إنشاء دفتر عناوين استنادًا إلى بيانات AD. من الواضح أن دفتر العناوين لن يتم تحديثه إلا إذا كان المجال سليمًا.


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


الآن من السطر CN=اسم المستخدم، OU=قسم المحاسبة، OU=الأقسام، DC=المجال، DC=ruتحتاج إلى استخراج اسم القسم مباشرة. أسهل طريقة للقيام بذلك هي استخدام المحددات الموجودة في علامة التبويب تحويل.



استخراج النص .


كمحددات أستخدمها الوحدة التنظيمية=و ، الوحدة التنظيمية=. من حيث المبدأ، الفاصلة كافية، لكني أحرص على الحذر.



أدخل المحددات.


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



عرض جدول الملخص.

تقرير سريع عن تكوين محطات العمل، دون تقديم وكلاء أو تحضيرات أخرى

الآن دعونا نحاول إنشاء جدول مفيد من خلال الحصول على البيانات الموجودة على أجهزة الكمبيوتر. لنقم بإعداد تقرير عن أنظمة التشغيل التي تستخدمها الشركة: لهذا سنقوم بإنشاء طلب، ولكن هذه المرة في المتصفح سنختار حاسوب.



نقوم بتقديم طلب لكائن الكمبيوتر.


دعونا نترك فئات الأعمدة حاسوبو قمةوتوسيعها:

  • فصل حاسوبتوسيع عن طريق الاختيار cn, نظام التشغيل, OperatingSystemServicePackو OperatingSystemVersion;
  • في الفصل قمةدعنا نختار متى تم الإنشاء.


طلب متقدم.


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



نقوم باستخراج السنة من وقت دخول الكمبيوتر إلى المجال.


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



إعدادات حقل الجدول المحوري.


الآن كل ما تبقى هو تخصيص التصميم حسب ذوقك والإعجاب بالنتيجة:



جدول ملخص لأجهزة الكمبيوتر في م.


إذا رغبت في ذلك، يمكنك إضافة مخطط ملخص، أيضًا في علامة التبويب "إدراج". أضف إلى "الفئة" (أو في "الصفوف" حسب الرغبة). نظام التشغيلإلى البيانات - cn. في علامة التبويب "التصميم"، يمكنك اختيار نوع المخطط الذي تفضله؛ لقد فضلت المخطط الدائري.



مخطط دائري.


من الواضح الآن أنه على الرغم من التحديث المستمر، فإن العدد الإجمالي لمحطات العمل التي تعمل بنظام التشغيل Windows XP والخوادم التي تعمل بنظام التشغيل Windows 2003 كبير جدًا. وهناك شيء يجب السعي من أجله.


رمز الطلب موجود تحت المفسد.

Let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"فئات الكائنات"], الكمبيوتر1 = domain.ru(), #"الأعمدة البعيدة" = Table.RemoveColumns(computer1,( "user"، "organizationalPerson"، "person"))، #"الأعمدة الأخرى المحذوفة" = Table.SelectColumns(#"Remoted columns"،("displayName"، "computer"، "top"))، #"توسيع العنصر الكمبيوتر" = Table.ExpandRecordColumn(#"أعمدة بعيدة أخرى"، "كمبيوتر"، ("cn"، "operatingSystem"، "operatingSystemServicePack"، "operatingSystemVersion")، ("cn"، "operatingSystem"، "operatingSystemServicePack"، " OperatingSystemVersion"))، #"الجزء العلوي الممتد" = Table.ExpandRecordColumn(#"كمبيوتر موسع"، "أعلى"، ("whenCreated")، ("whenCreated"))، #"Extracted year" = Table.TransformColumns( #" العنصر الموسع العلوي"،(("whenCreated"، Date.Year)))، #"Remote columns1" = Table.RemoveColumns(#"Extracted year"،("displayName")) في #"Remote columns1"

اضف اشارة

0

لدي نص العمل التالي الذي يتحقق مما إذا كانت قائمة كبيرة من المستخدمين في ملف CSV عضوًا في مجموعة AD ويكتب النتائج إلى results.csv.

لست متأكدًا من كيفية تحويل البرنامج النصي حتى أتمكن من تغيير $group = "InfraLite" إلى $group = DC .\List_Of_AD_Groups.CSV .

وبالتالي، لا يقوم البرنامج النصي بإرجاع المطابقات لمجموعة إعلانية واحدة فقط، ولكنه يُرجع المطابقات لـ 80 مجموعة إعلانية موجودة في List_of_AD_groups.csv. كتابة نعم/لا لكل مجموعة إعلانية في عمود CSV جديد (أو إذا لم يكن ذلك ممكنًا، فإن إنشاء ملف CSV منفصل لكل مجموعة بالنتائج سيؤدي إلى نفس الشيء.

يمكنني القيام بذلك يدويًا عن طريق تغيير القيمة من $group واسم ملف التصدير وإعادة تشغيل البرنامج النصي 80 مرة، ولكن يجب أن أكون سريعًا مع PS للقيام بذلك

على سبيل المثال results.csv ؟:

الاسم AD_GROUP1 AD_GROUP2 AD_GROUP80 وما إلى ذلك. user1 نعم لا نعم user2 لا نعم user3 لا نعم لا صدى "اسم المستخدم`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $ members = Get-ADGroupMember -Identity $group -Recursive | حدد -ExpandProperty SAMAccountName foreach ($user in $users) ( if ($ members -contains $user) ( echo "$user $group`tYes" >> results.csv ) else ( echo "$user`tNo" >> results .csv)))

  • 2 إجابات
  • فرز:

    نشاط

0

سيكون الحل البسيط لمشكلتك هو لف التعليمات البرمجية الموجودة لديك في حلقة أخرى وإنشاء ملف إخراج لكل مجموعة:

$groups = Get-Content "C:\groups.txt" foreach ($group in $groups) ( $ members = Get-ADGroupMember ... ... )

قد يكون الأسلوب الأكثر أناقة هو إنشاء قالب تعيين مجموعة، واستنساخه لكل مستخدم، وملء نسخة بعضوية مجموعة المستخدم. شيء من هذا القبيل يجب أن تعمل:

قالب $ = @() الحصول على المحتوى "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | مكان الكائن ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap [$_] = $true ) كائن جديد - نوع PSObject - الخاصية $groupmap ) | تصدير-Csv "C:\user_group_mapping.csv" -NoType

0

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

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

وهنا ما توصلت إليه:

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # إعداد جدول التجزئة للاستخدام لاحقًا $UserHash = New-Object -TypeName System.Collections.Hashtable # حلقة خارجية لإضافة مستخدمين وعضوية إلى UserHash $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # يزيل بناء جملة LPAP إلى SAMAccountName الخاص بالمجموعة $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split("،")) .replace("CN=","") ) # إضافة زوج المستخدم = العضوية إلى التجزئة $UserHash.Add($_,$Memberships)) # حلقة خارجية لإنشاء كائن لكل مستخدم $Results = $UserArray | ForEach-Object( # قم أولاً بإنشاء كائن بسيط $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # قم بإضافة أعضاء إلى الكائن ديناميكيًا، بناءً على $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash لمعرفة ما إذا كانت المجموعة تظهر في قائمة عضوية المستخدم $UserIsMember = $UserHash.($User.Name) - يحتوي على $_ # إضافة خاصية إلى الكائن، والقيمة $User | Add-Member -MemberType NoteProperty -Name $ _ -Value $UserIsMember ) # إرجاع الكائن إلى المتغير Return $User ) # تحويل الكائنات إلى ملف CSV، ثم إخراجها $Results |

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

البرامج النصية لتفريغ كافة المستخدمين من MS Active Directory (ITGC)

إيفان بيسكونوف

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

1. التحميل السريع باستخدام برنامج PowerShell النصي

يوجد أدناه برنامج PowerShell النصي كأحد أبسط وأسرع الطرق للحصول على قائمة بجميع مستخدمي مجال AD بتنسيق CSV، والتي يمكن فتحها دون أي مشاكل في Excel.

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=person) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # عدد الحسابات $users.Count $users | ForEach-Object ( $user = $_.Properties New-Object PsObject -Property @( Position = $user.description Department = $user.department Login = $user.userprincipalname Phone = $user.telephonenumber Room = $user.physicaldeliveryofficename كامل الاسم = $user.cn ) ) | تصدير-Csv -NoClobber -تشفير utf8 -المسار C: list_domain_users.csv

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

بعد التفريغ، إذا قمت بفتحه على الفور list_domain_users.csv ، سيبدو غير قابل للقراءة، ومع ذلك، باستخدام الوسائل القياسية يمكننا بسهولة تحويله إلى التنسيق الذي نحتاجه. فتح في إكسل list_domain_users.csv ، حدد العمود الأول، ثم انتقل إلى علامة التبويب "البيانات" وانقر على "النص حسب الأعمدة". حدد "محدد" وانقر على "التالي". مستعد!

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

2. أمر PowerShell المتقدم للحصول على تحميلات مستخدم Active Directory

تتيح لك وحدة Active Directory Module لأداة Windows PowerShell (المقدمة في Windows Server 2008 R2 والإصدارات الأحدث) إنشاء أوامر cmdlets التي تؤدي عمليات معالجة متنوعة باستخدام كائنات دليل AD. يتم استخدام أمر cmdlet للحصول على معلومات حول المستخدمين وخصائصهم الحصول على ADUser.

للبدأ قم بتشغيل نافذة Powershell مع حقوق المسؤول واستيراد وحدة Active Directory لمزيد من الإجراءات:
الدليل النشط لوحدة الاستيراد

ل قائمة كافة حسابات المجال لننفذ الأمر:

الحصول على ADUser -filter *

ل عرض معلومات كاملة عن جميع السمات المتاحة مستخدم المستخدم، قم بتشغيل الأمر

الحصول على ADUser -هوية المستخدم -خصائص *


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

Get-ADUser -filter * -properties كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي | قدم الاسم، كلمة المرور انتهت، كلمة المرور الأخيرة، كلمة المرور لا تنتهي > C: tempusers.txt

أو على الفور تحميل إلى CSV ، والذي سيكون مناسبًا للتصدير إلى Excel في المستقبل (بالإضافة إلى ذلك، باستخدام كائن الفرز، سنقوم بفرز الجدول حسب عمود كلمة المرورLastSet، ونضيف أيضًا شرط المكان - يجب أن يحتوي اسم المستخدم على السلسلة "Dmitry")

Get-ADUser -filter * -properties كلمة المرور منتهية الصلاحية، كلمة المرور الأخيرة، كلمة المرور لا تنتهي | حيث ($_.name –مثل “*ديمتري*”) | فرز كائن كلمة المرورLastSet | حدد اسم الكائن، وPasswordExpired، وPasswordLastSet، وPasswordNeverExpires | تصدير-csv-المسار c:tempuser-password-expires-2015.csv