אם אתה ניהול שרתי אינטרנט או דואר, ידוע לך כמה הם תלויים ברשומות DNS שמוגדרות בצורה תקינה. חסרות רשומות DNS יכולות לגרום לבעיות רבות, כולל אי-אפשרות למשתמשים למצוא את האתר שלך או לאסוף דואר אלקטרוני. דבר חיובי שישנה את הכלי PowerShell Resolve-DnsName, ועם זאת, ניתן לאוטומטזיה בבדיקה של רשומות DNS דרך תסריטים.
היום של מנהל כבר מלא מספיק, ובדיקה ידנית של אם רשומות DNS ניתן לפתור כרוך ביותר מאמץ ידני.
במאמר זה, תלמד איך ולמה להשתמש ב-cmdlet של Resolve-DnsName
ב-PowerShell לשאילתת רשומות DNS. עד סיום המאמר, תלמד גם כיצד ליצור סקריפט בסיסי ליצירת דוח על רשומות 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. אבל, שירותים צד שלישי אלו כמעט תמיד עולים כסף. ישנה אלטרנטיבה חינמית, שגם מאפשרת לך להציג את יכולות התסריט שלך!
הפקודה Resolve-DnsName
, כפי שמשמעות השמו, מפענחת שמות DNS לכתובות IP ולהיפך. פקודה זו היא חלק ממודול הפווורשל dnsclient שמגיע, כפי שרשום כאן, עם Windows 10, Windows Server 2012/R2, Windows Server 2016 ו-Windows Server 2019.
מכיוון ש־Resolve-DnsName
היא פקודת PowerShell, היא מחזירה את התוצאות שלה כאובייקטים שניתן לאחסן, לשנות ולייצא. לדוגמה, חיפוש הרשומה DNS של google.com באמצעות הפקודה Resolve-DnsName google.com
יחזיר את התוצאות הבאות.

התוצאה הוחזרה כ־אובייקט שמאפשר לך לייצא את התוצאות לקובץ CSV, או לשנות את הפורמט כדי ליצור דוחות HTML.
פקודת 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
. או ניתן פשוט לעיין בעזרת הפקודה שלget-help Resolve-DnsName
.
שימוש בשרתים ספציפיים לחיפוש DNS
Resolve-DnsName
משתמש בכתובות של שרתי DNS המוגדרות במחשב שלך כברירת מחדל. אך, תוכל גם להגדיר את Resolve-DnsName
להשתמש בשרת DNS ספציפי בעת ביצוע חיפושים.
לדוגמה, אם ברצונך להשתמש ב־Google Public DNS לחיפוש רשומות, תוכל לעשות זאת על ידי הוספת פרמטר -Server
בפקודה שלך, דומה לדוגמה למטה.
תוצאת הפקודה למעלה תהיה דומה לזו שמוצגת בתמונת המסך למטה.

בנקודה זו, ייתכן שתשאל, "למה לי להשתמש בשרת DNS שונה?" שאלה תקפה. אם תנסה לחפש את אותה רשומה באמצעות שרת DNS ברירת המחדל של המחשב שלך או באמצעות שרת DNS אחר, ייתכן ותקבל את אותה התוצאה.
יתכן וישנם רבים סיבות להשתמש בשרתי DNS שונים עם Resolve-DnsName
. חלק מהסיבות האלו עשויות לכלול:
- מהירות – יתכן ויש שרתי DNS שמבצעים ביצועים יותר מהירים מאחרים.
- אבטחה – יתכן ויש שרתי DNS שכוללים יותר אמצעים לאבטחה שמונעים גניבות ותקיפות.
- זמינות רשומות – ברוב התרחישים, ארגונים מחזיקים שרתי DNS פנימיים שמכילים את האזורים והרשומות לשמות המתבצעות רק בפנים. במקרה זה, חיפוש שם פנימי באמצעות שרת DNS ציבורי יכשל.

- שרתי DNS אינם העברת בקשות – ישנם ארגונים שאינם מאפשרים העברת DNS. שימוש בהם לחיפוש DNS של רשומות DNS ציבוריות יכשל.
- איתור תקלה ובדיקה – כשהשרתים DNS המועדפים עליך חוויים בעיות, ייתכן שתרצה לבדוק את החיפושים שלך באמצעות שרת DNS אחר.
דיווח על רשומות DNS באמצעות סקריפט PowerShell
עכשיו שלמדת את היסודות של שימוש בפקודת Resolve-DnsName, בסעיף זה תלמד ליצור סקריפט PowerShell כדי לנטר ולדווח על רשומות DNS. אתה צריך להיות מסוגל להחיל את הידע שצברת בקטעים הקודמים עד כה בבניית הסקריפט הזה.
התחל את עורך הסקריפט שאתה מעדיף וצור קובץ חדש בשם GetDnsRecord.ps1.
הגדרת המשתנים
ראשית, קבע את המשתנים שיש להשתמש בהם. המשתנים אלו יכילו את השמות של רשומות ה-DNS שתרצה שהסקריפט שלך יבצע שאילתות עבורם
$NameList
– משתנה זה יחזיק את השמות של רשומות ה-DNS שתרצה שהסקריפט ישאיר עבורן שאילתות$Serverlist
– השתמש במשתנה זה כדי לציין את שרתי ה-DNS שישמשו לסקריפט לביצוע שאילתות.
העתק את הקוד למטה והדבק אותו בתחילת הסקריפט שלך.
ביצוע שאילתות DNS
הבא, יש לקוד להיות מסוגל לחפש את הרשומה DNS של כל אחד מהשמות שצויינו. במקרה זה, יש להשתמש בלולאת foreach (foreach loop) כדי לעבור על רשימת הרשומות ולחפש כל שם באמצעות Resolve-DnsName
.
השורה $FinalResult = @()
יוצרת מערך ריק שבו יישמר התוצאה הסופית. לאחר מכן, באמצעות לולאת foreach, PowerShell מעביר למשתנה בשם $Name
כל פריט במשתנה $NameList
.
בכל איטרציה, השורה $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
כדי לבצע חיפוש ברשומות DNS בפוורשל. למדת גם על ההבחנה בין Resolve-DnsName
לכלים אחרים כמו יישות ה-nslookup.
ראית איך ניתן להשתמש ב-Resolve-DnsName
בתסריט כדי לאוטומטיזציה של חיפוש רשומות DNS. זה יכול לשמש ככלי לניטור כדי לוודא שאתה מודע למצב הנוכחי של רשומות DNS שאתה יודע עליהן.
על ידי שימוש בכישורי תסריט PowerShell שלך, ניתן לשדרג את תסריט הדיווח על ידי הוספת קוד לשליחה אוטומטית של הדוח באמצעות דואר אלקטרוני לנמענים מסוימים. ניתן גם לשנות אותו כך שיצירת פלט HTML יהיה אפשרית ומושכלת לעין.
לבסוף, Resolve-DnsName
הוא כלי מצוין לחיפוש ב-DNS בין אם אתה משתמש בו באופן ידני או לצורך אוטומציה בתסריטים. כעת יש לך הבנה על איך זה עובד, וזה תלוי בך למצוא דרכים להשתמש בו כחלק ממשימות הניהול שלך.