العثور على مستخدمي Active Directory الذين انتهت صلاحية كلمة المرور (PowerShell)

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

هل نبدأ مقالنا حول البحث عن المستخدمين في الدليل النشط الذين لديهم كلمات مرور منتهية الصلاحية (PowerShell).

العثور على المستخدمين في AD الذين لديهم كلمات مرور منتهية الصلاحية باستخدام PowerShell

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

المتطلبات المسبقة

إذا كنا نخطط لمتابعة هذا المقال، فسنحتاج إلى ما يلي:

  • A Windows computer joined to an Active Directory domain.
  • وحدة الـ ActiveDirectory المثبتة على الحاسوب.
  • يجب أن يحتوي الحاسوب أيضًا على نظام تشغيل Windows بنسخة PowerShell 5.1 أو أعلى.

البحث عن المستخدمين في Active Directory

قبل إعادة تعيين كلمة مرور المستخدم، يجب علينا أولاً تحديد موقع الحساب. ونتيجة لذلك، يجب أن يكون خطوتنا الأولى هي تحديد ما إذا كان هناك احتياطي موجودًا. للقيام بذلك، قم بتشغيل الأمر Get-ADUser باستخدام معلمة Identity المضبوطة على اسم الحساب.

تقبل معلمة Identity واحدة من أربعة معرفات: الاسم المميز (DN)، GUID (objectGUID)، معرف الأمان (objectSID)، أو اسم الحساب SAM (SAMAccountName).

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

Get-ADUser -Identity

عاد الأمر بخصائص المستخدم، كما هو موضح في اللقطة أدناه، مؤكدًا وجود الحساب وصحة اسم المستخدم:

العثور على المستخدمين الذين انتهت صلاحية كلمة مرورهم في AD

يمكننا بسرعة الحصول على تاريخ انتهاء كلمة المرور لمستخدم واحد عن طريق إضافة واستخدام السمة msDS-UserPasswordExpiryTimeComputed مع الأمر Get-ADUser:

Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'

ولكن هذا السطر من الشيفرة سينتج ناتجاً غير قابل للقراءة من قبل الإنسان، لذا نحتاج إلى إضافة السطر التالي لتحويل النتائج إلى شكل قابل للقراءة. لإضافة السطر أدناه، سنستخدم الأمر Select-Object -Property على أنبوب PowerShell جديد:

Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}

عند تشغيل نفس السمة، msDS-UserPasswordExpiryTimeComputed, مع الفلتر الصحيح، نحصل على قائمة من حسابات الدليل النشط وأوقات انتهاء كلمات مرورها:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

نحسن النص السابق من خلال تصدير قائمة المستخدمين إلى ملف نصي يمكننا استخدامه لاحقًا. للقيام بذلك، يمكننا استخدام الأمر Out-File الذي سيُرسل الناتج إلى ملف نصي:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt

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

إعادة تعيين كلمة مرور مستخدم Active Directory

الآن بعد أن تعلمنا كيفية استخدام Get-ADUser للتحقق من حساب المستخدم، فإننا نعلم أن النتيجة صحيحة وأن معرف المستخدم موجود. يجب علينا الآن استخدام أمر Set-ADAccountPassword لإعادة تعيين كلمة مرور المستخدم.

يغير أمر Set-ADAccountPassword كلمة مرور المستخدم إذا قدمنا كلمة المرور القديمة. إذا لم تكن لدينا كلمة المرور القديمة، فإن الأمر يعيد تعيينها بمعامل Reset.

كلمة المرور الجديدة التي تم إنشاؤها عشوائيًا هي كلمة مرور عشوائية مكونة من 14 حرفًا مع خمسة أحرف غير أبجدية رقمية. للتنفيذ، افتح نافذة PowerShell، وانسخ الكود، والصقه في PowerShell، واضغط على Enter:

$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
  • السطر ١: يحدد اسم المستخدم الذي سيتم إعادة تعيين كلمة المرور الخاصة به. تأكد من استبدال سلسلة اسم_المستخدم بمعرف المستخدم الفعلي.
  • السطر ٢: يستورد فئة كائن التجميع .NET System.Web.
  • السطر ٣: ينشئ كلمة مرور عشوائية تتكون من ١٤ حرفًا بما في ذلك خمسة حروف غير أبجدية رقمية.
  • السطر ٤: يحول كلمة المرور النصية العادية إلى كائن كلمة مرور آمن.
  • السطر ٥: يسهل إعادة تعيين كلمة المرور.
  • السطر ٦: يفرض تغيير كلمة المرور على حساب AD عند تسجيل الدخول التالي.
  • السطر ٧: يعرض كلمة المرور الجديدة في وحدة التحكم. ومع ذلك، لا نوصي بذلك لأغراض الأمان. السطر ٦ يتولى تغيير كلمة المرور وفقًا لاختيار المستخدم ويُعتبر أفضل ممارسة لهذا الإجراء.

قم بتحسين أمان الدليل النشط و Azure AD

جرّبنا مجانًا، الوصول إلى جميع الميزات. – متوفر أكثر من ٢٠٠ قالب تقرير AD. قم بتخصيص تقارير AD الخاصة بك بسهولة.




كتابة أداة استعادة كلمة مرور Active Directory

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

عند بناء أداة، يكون جانب حاسمًا هو أن من يقوم بتشغيل الأداة لا يجب أن يضطر لتعديل الكود في كل مرة. لكن للأسف، لا يزال كودنا يتطلب من المستخدم تعديل متغير $username.

بدلاً من السماح لمستخدمي أداةنا بتغيير القيم يدويًا، لماذا لا نكتب سكريبت يقبل المعلمات؟ للقيام بذلك، اتبع الخطوات التالية:

  1. افتح Windows PowerShell ISE.
  2. قم بإنشاء ملف PowerShell جديد وحفظ الملف تحت الاسم Reset-ADPassword.ps1. احفظ السكريبت في موقعنا المفضل. تحفظ هذه المقالة الملف في مجلد C:\PS\scripts .
  3. يرجى نسخ ولصق الكود أدناه في محرر السكريبت قبل حفظ السكريبت.
param (
     $username
 )

 if (-not($username)) {
     Write-Host "Username not found. Exiting script"
     return $null
 }

 try {
     $null = Get-ADUser -Identity $username -ErrorAction Stop
 } catch {
     Write-Host $_.Exception.Message
     return $null
 }

$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force

 try {
     Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
     Set-ADuser -Identity $username -ChangePasswordAtLogon $true

     [pscustomobject]@{
         Username = $username
         NewPassword = $randomPassword
     }
 } catch {
     Write-Host "There was an error performing the password reset. Please find additional information below."
     Write-host $_.Exception.Message
     return $null
 }
  • السطر 1: يضيف معاملات يسمى اسم المستخدم.
  • السطر 5: يتحقق مما إذا كان المستخدم قد قدم قيمة اسم المستخدم. الإذا كتلة كذلك يظهر رسالة ويخرج من السيناريو إذا تحقق الشرط.
  • السطر 10: يتحقق مما إذا كان اسم المستخدم صالحًا أم لا.
  • السطر 12: يتحقق من صحة اسم المستخدم إذا كان غير صالح. يعرض رسالة ويتوقف تنفيذ السيناريو.
  • السطر 17: يولد كلمة مرور عشوائية هي 14 حرفًا طويلة مع خمسة أحرف غير عددية أو حرفية.
  • السطر 18: يحول كلمة المرور العادية إلى كائن كلمة مرور آمنة.
  • السطر 20: يسهل إعادة تعيين كلمة المرور.
  • السطر 22: يفرض على حساب AD تغيير كلمة المرور عند التسجيل المقبل.
  • السطر 24: يعرض كلمة المرور الجديدة في وحدة التحكم. ومع ذلك، لا نوصي بهذا لأسباب الأمان. السطر 6 سيهتم بتغيير كلمة المرور حسب رغبة المستخدم ويعتبر أفضل ممارسة لهذه الإجراء.
  • السطر 28: يعرض رسالة خطأ إذا فشل الإعادة تعيين.

مثال على تنفيذ أداة اعادة تعيين كلمة المرور في AD

A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.

اعادة تعيين كلمة المرور لمستخدم واحد

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

.\Reset-ADPassword.ps1 -username USERNAME

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

اعادة تعيين كلمة المرور لعدة أشخاص

لحسن الحظ، يمكننا تكرار قائمة في باورشيل باستخدام المصفوفات وحلقة foreach. علاوة على ذلك، يتيح لنا الأمر ForEach-Object في باورشيل معالجة العناصر المتعددة بشكل متزامن. يتيح لنا هذا الأمر تمرير عناصر مختلفة من خلال القناة.

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

@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

ومع ذلك، نصلح هذا إذا قمنا بتصحيح حسابات مستخدمين أكثر من اثنين. تذكر الملف النصي الذي أنشأناه سابقا؟ نستخدمه في هذا القسم.

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

Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

بعد تنفيذ المقطع أعلاه، سنكون قد قمنا بإعادة تعيين كلمات مرور مستخدمين متعددين في تشغيل واحد.

شكرًا لك على قراءة مقالة المدونة الخاصة بالعثور على مستخدمي Active Directory ذوي كلمات مرور منتهية الصلاحية (PowerShell). سنختمها الآن.

العثور على مستخدمي AD ذوي كلمات مرور منتهية PowerShell الختام

باختصار، فإن العثور على مستخدمي Active Directory بكلمات مرور منتهية الصلاحية باستخدام PowerShell هي عملية مباشرة توفر لنا الوقت والجهد. باستخدام أمر Get-ADUser وتصفية المستخدمين الذين لديهم كلمات مرور منتهية الصلاحية، يمكنك تحديد المستخدمين المستهدفين بسرعة وإعادة تعيين كلمة المرور أو إشعارات انتهاء الصلاحية. هذا الأمر مفيد للمؤسسات التي لديها عدد كبير من المستخدمين، لأنه يسمح لك بإدارة انتهاء صلاحية كلمة المرور بشكل استباقي وتقليل مخاطر خروقات الأمان.

اطلع على قسم الدليل النشط الخاص بنا في مدونتنا هنا بالإضافة إلى قسم PowerShell هنا لقراءة المزيد من المحتوى.

Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/