إذا كنت تدير خوادم الويب أو البريد الإلكتروني، فإنك تعلم كم تعتمد هذه الخوادم بشكل كبير على سجلات DNS المكونة بشكل جيد. يمكن أن تتسبب السجلات الناقصة لدى DNS في حدوث مشاكل متنوعة، بما في ذلك عدم قدرة المستخدمين على العثور على موقع الويب الخاص بك أو عدم تسليم الرسائل البريدية. الشيء الجيد هو أن cmdlet Resolve-DnsName في PowerShell موجود، ومعه يمكن أتمتة مراقبة سجلات DNS من خلال البرمجة.
يكون يوم المسؤول ممتلئًا بما فيه الكفاية، وفحص يدوياً ما إذا كان بإمكان توجيه سجلات DNS بشكل مناسب يتطلب مزيدًا من الجهد اليدوي.
في هذا المقال، ستتعلم كيفية استخدام cmdlet Resolve-DnsName
للاستعلام عن سجلات DNS باستخدام PowerShell. بحلول نهاية هذا المقال، ستكون قد تعلمت أيضًا كيفية إنشاء سكريبت أساسي لإعداد تقرير حول سجلات DNS التي تم تعيينها للمراقبة.
متطلبات أولية
هذا المقال هو مرشد تعليمي، وإذا كنت تعتزم متابعة الأمثلة، فستحتاج إلى:
- A computer running Windows 10 or above.
- Windows PowerShell 5.1 أو PowerShell 7.0
- A script editor such as Visual Studio Code, Atom, or Notepad++.
Resolve-DnsName: محلل DNS في PowerShell
هناك أكثر من طريقة لأداء استعلام DNS. يشبه cmdlet Resolve-DnsName
إلى حد ما أداة سطر الأوامر nslookup
المرفقة مع نظام التشغيل Windows أو dig
إذا كنت مسؤولًا عن Linux.
تقدم بعض المواقع خدمات مراقبة/تقارير سجل DNS. ولكن، هذه الخدمات من الطرف الثالث غالبًا ما تأتي بتكلفة، بالطبع. هناك بديل مجاني، يتيح لك أيضًا إظهار مهاراتك في البرمجة!
يقوم cmdlet Resolve-DnsName
، كما يوحي اسمه، بحل أسماء DNS إلى عناوين IP والعكس. هذا الأمر جزء من وحدة PowerShell dnsclient التي، حتى تاريخ كتابة هذا النص، متوفرة مع Windows 10، وWindows Server 2012/R2، وWindows Server 2016، وWindows Server 2019.
بما أن Resolve-DnsName
هو cmdlet PowerShell، فإنه يُرجع نتائجه ككائنات يمكن تخزينها وتلاعبها وتصديرها. على سبيل المثال، البحث عن سجل DNS لـ google.com باستخدام الأمر Resolve-DnsName google.com
يعطيك النتيجة المعروضة أدناه.

تم إرجاع النتيجة كـ كائن يتيح لك تصدير النتائج إلى ملف CSV، أو تلاعب الشكل لإنتاج تقارير HTML.
يختلف cmdlet Resolve-DnsName
عن أداة nslookup
القديمة. تُرجع nslookup
سلسلة نصية بسيطة. يمكنك رؤية مثال في لقطة الشاشة التالية. إذا كنت بحاجة إلى تحليل أي من هذه المعلومات، فسيكون الأمر صعبًا.

الاستعلام عن أنواع مختلفة من سجلات DNS
بشكل افتراضي، يستعلم Resolve-DnsName
عن أنواع سجلات DNS A و AAAA . على سبيل المثال، إذا قمت بالبحث عن سجل DNS لـ gmail.com
باستخدام الأمر أدناه:
كما يمكنك رؤية أدناه، يتم إرجاع سجلات AAAA و A فقط. هذا لأن نوع سجل DNS الذي يجب البحث عنه لم يتم تحديده.

الآن، نظرًا لأننا جميعًا نعلم أن gmail.com هو نطاق بريد إلكتروني يستخدمه خدمة البريد الإلكتروني التابعة لـ Google، يجب أن يكون هناك سجل MX مرتبط به، أليس كذلك؟ حسنًا، ليس هناك حاجة للافتراض عندما يمكنك التأكيد باستخدام هذا الأمر:
المخرج الموضح في لقطة الشاشة أدناه يظهر قائمة سجلات MX لـ gmail.com.

لمعرفة المزيد عن الأنواع المختلفة للسجلات التي يمكن استخدامها مع
Resolve-DnsName
، قم بزيارة هذا الرابط وابحث عن الجدول المتعلق بالمعامل-Type
. أو يمكنك مراجعة مساعدة Resolve-DnsName باستخدام الأمرget-help Resolve-DnsName
.
استخدام خوادم محددة للاستعلام عن DNS
حل-اسم-النطاق
يستخدم عناوين خوادم DNS المكونة على جهاز الكمبيوتر الخاص بك افتراضيًا. ولكن يمكنك أيضًا جعل حل-اسم-النطاق
يستخدم خادم DNS محدد عند إجراء الاستعلامات.
على سبيل المثال، إذا كنت ترغب في استخدام Google Public DNS للبحث عن السجلات، يمكنك القيام بذلك عن طريق إضافة معلمة -Server
في الأمر الخاص بك على غرار المثال أدناه.
سيكون نتيجة الأمر أعلاه مشابهة لتلك الموضحة في الصورة أدناه.

في هذه النقطة، قد تسأل نفسك، “لماذا يجب علي استخدام خادم DNS مختلف؟”. هذا سؤال صحيح. إذا حاولت البحث عن نفس السجل باستخدام خادم DNS الافتراضي الخاص بجهازك، أو خادم DNS آخر، فقد تحصل على نتيجة مماثلة على الأرجح.
قد تكون هناك العديد من الأسباب لاستخدام خوادم DNS مختلفة مع حل-اسم-النطاق
. قد تتضمن بعض هذه الأسباب:
- السرعة – قد تكون بعض خوادم DNS أسرع من غيرها.
- الأمان – قد تحتوي بعض خوادم DNS على إجراءات أمان أكثر من غيرها تمنع عمليات الاختراق والهجمات.
- توفر السجلات – في معظم الحالات، تمتلك المؤسسات خوادم DNS الداخلية الخاصة بها التي تحتوي على المناطق والسجلات للأسماء التي يتم حلها داخليًا فقط. في هذه الحالة، ستفشل محاولة البحث عن اسم داخلي باستخدام خادم DNS عام.

- خوادم DNS لا تقوم بإعادة توجيه الطلبات – بعض المؤسسات لا تسمح بإعادة توجيه DNS. ستفشل محاولة استخدامها للبحث في سجلات DNS العامة.
- تحليل واختبار – عندما تكون خوادم DNS المفضلة لديك غير مستجيبة، قد ترغب في اختبار البحث باستخدام خادم DNS مختلف.
الإبلاغ عن سجلات DNS باستخدام سكريبت PowerShell
الآن بعد أن تعلمت أساسيات كيفية استخدام cmdlet Resolve-DnsName
، في هذا القسم، ستتعلم كيفية إنشاء سكريبت PowerShell لرصد والإبلاغ عن سجلات DNS. يجب أن تكون قادرًا على تطبيق المعرفة التي اكتسبتها في الأقسام السابقة حتى الآن في بناء هذا السكريبت.
قم بتشغيل محرر النصوص الخاص بك وأنشئ ملفًا جديدًا باسم GetDnsRecord.ps1.
تعريف المتغيرات
أولاً، حدد المتغيرات التي ستستخدم. ستتضمن هذه المتغيرات ما يلي:
$NameList
– سيحمل هذا المتغير أسماء سجلات DNS التي ترغب في أن يستعلم عنها سكريبتك$Serverlist
– استخدم هذا المتغير لتحديد خوادم DNS التي سيستخدمها السكريبت للبحث.
انسخ الشيفرة أدناه والصقها في بداية سكريبتك.
إجراء عمليات البحث في DNS
التالي، يجب أن يكون الشيفرة قادرة على البحث عن سجل DNS لكل من الأسماء المحددة. في هذه الحالة، سيتم استخدام حلقة التكرار لتكرار قائمة السجلات والبحث عن كل اسم باستخدام Resolve-DnsName
.
السطر $FinalResult = @()
ينشئ مصفوفة فارغة حيث ستتم تخزين النتيجة النهائية. ثم، باستخدام حلقة التكرار، يقوم PowerShell بتمرير كل عنصر في المتغير $NameList
إلى متغير يدعى $Name
.
في كل تكرار، ينشئ السطر $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage
كائنًا مؤقتًا بأربع خصائص لاحتواء نتيجة البحث الناجح لـ DNS.
ثم، يتم استخدام البيان try{}
لتشغيل أمر Resolve-DnsName
للبحث في سجلات DNS A وملء قيم $tempObj
. إذا فشلت عملية البحث في DNS، يقوم البيان catch{}
بالتقاط الخطأ، وسيتم تضمين الخطأ في كائن $tempObj
.
في نهاية كل تكرار، سيتم إلحاق قيمة كائن $tempObj
بـ $FinalResult
. وعندما يتم معالجة آخر عنصر في مصفوفة $NameList
، ستخرج الحلقة. ثم، سيتم عرض قيمة $FinalResult
.
انسخ الشيفرة أدناه والصقها في نهاية سيناريو الخاص بك. لا حاجة لتغيير القيم.
بعد حفظ السيناريو، قم بتشغيله في PowerShell بالاتصال بالاسم GetDnsRecord.ps1. يظهر في الاستعراض أدناه الإخراج.

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

الاستنتاج
في هذا المقال، تعلمت أساسيات كيفية استخدام cmdlet Resolve-DnsName
لأداء بحث سجلات DSN في PowerShell. كما تعلمت كيف يختلف Resolve-DnsName
عن أدوات أخرى مثل أداة nslookup.
رأيت كيف يمكن استخدام Resolve-DnsName
في سيناريوهات النصوص لتحقيق بحث السجلات DNS تلقائيًا. سيكون ذلك مفيدًا كأداة للمراقبة لضمان أنك على دراية بالحالة الحالية لسجلات DNS التي تراقبها.
باستخدام مهارات البرمجة الخاصة بك في PowerShell، يمكن تحسين السكربت الخاص بالتقارير عن طريق إضافة كود لإرسال التقرير عبر البريد الإلكتروني إلى المستلمين المحددين. كما يمكن تعديله لإنشاء إخراج HTML جذاب بصريًا.
في النهاية، Resolve-DnsName
هي أداة ممتازة للبحث عن DNS سواء كنت تستخدمها يدويًا أو للتلقائية في السكربتات. الآن لديك المعرفة حول كيفية عملها، ومن الصعب عليك العثور على وسائل لاستخدامها كجزء من مهام الإدارة الخاصة بك.