رفتن به محتوا
مدیریت سرور

آموزش کامل دستور Resolve-DnsName در پاورشل (PowerShell)

پاورشل (PowerShell) یکی از ابزارهای مدیریتی قدرتمند در ویندوز است که امکان اجرای دستورات و اسکریپت‌ های پیشرفته را برای مدیران سیستم، برنامه‌ نویسان و کاربران حرفه‌ای فراهم می‌کند. در میان ده‌ها دستور موجود در پاورشل، دستور Resolve-DnsName یکی از مهم‌ترین و کاربردی‌ترین کامندلت‌ ها (Cmdlet) برای بررسی…

11 دقیقه مطالعهبلاگ ابر آراد
مجله ابر آرادINSIGHTS / مدیریت سرور

پاورشل (PowerShell) یکی از ابزارهای مدیریتی قدرتمند در ویندوز است که امکان اجرای دستورات و اسکریپت‌ های پیشرفته را برای مدیران سیستم، برنامه‌ نویسان و کاربران حرفه‌ای فراهم می‌کند. در میان ده‌ها دستور موجود در پاورشل، دستور Resolve-DnsName یکی از مهم‌ترین و کاربردی‌ترین کامندلت‌ ها (Cmdlet) برای بررسی و تحلیل DNS محسوب می‌شود.

این دستور در واقع نسخه‌ی مدرن‌تر و پیشرفته‌تر ابزار Nslookup است و برای انجام جستجوهای DNS، بررسی وضعیت دامنه‌ ها، مشاهده رکوردهای IP، و تحلیل مشکلات شبکه به کار می‌رود.

دستور Resolve-DnsName چیست؟

دستور Resolve-DnsName در پاورشل برای انجام جست‌وجوی نام دامنه‌ ها (DNS Lookup) استفاده می‌شود.
به زبان ساده، این دستور نام یک میزبان (Hostname) را گرفته و آدرس IP متناظر با آن را بازمی‌گرداند. دقیقاً مشابه کاری که مرورگر شما هنگام ورود به یک سایت انجام می‌دهد.

اما بر خلاف ابزارهای سنتی مثل nslookup، دستور Resolve-DnsName امکانات بسیار بیشتری دارد:

  • پشتیبانی از انواع رکوردهای DNS (A, AAAA, MX, PTR و …)
  • امکان تعیین سرور DNS دلخواه
  • پشتیبانی از IPv6
  • بررسی وضعیت حافظه نهان DNS
  • امکان اجرای درخواست‌ها فقط از طریق Cache یا بدون استفاده از فایل میزبان (Host File)

تفاوت Resolve-DnsName با Nslookup

ویژگیNslookupResolve-DnsName
محیط اجراابزار مستقل خط فرمانCmdlet داخلی پاورشل
پشتیبانی از IPv6محدودکامل
خروجی ساختاریافتهخیر (متنی)بله (شیء‌محور)
سازگاری با اسکریپت‌هاکمبسیار زیاد
نیاز به ماژول اضافینداردپیش‌فرض در PowerShell 4.0 به بعد

به عبارت دیگر، Resolve-DnsName نه‌تنها جایگزین Nslookup است، بلکه اطلاعات دقیق‌تری در قالب آبجکت‌ های پاورشل ارائه می‌دهد که به‌راحتی می‌توانید آن‌ها را فیلتر، ذخیره یا پردازش کنید.

ساختار کلی دستور Resolve-DnsName

ساختار اصلی این دستور به شکل زیر است:

Resolve-DnsName [-Name] <String> [-Type] <TypeName> [-Server] <ServerName or IP> [پارامترهای دیگر]

پارامترهای مهم:

  • Name: نام دامنه یا میزبان مورد نظر برای جستجو
  • Type: نوع رکورد DNS (مثل A، AAAA، MX، CNAME و غیره)
  • Server: مشخص کردن DNS Server دلخواه (به طور پیش‌فرض از DNS کارت شبکه استفاده می‌شود)
  • NoHostsFile: اجرای درخواست بدون استفاده از فایل Host محلی
  • CacheOnly: اجرای درخواست صرفاً از حافظه نهان سیستم
  • LlmnrOnly: انجام جستجو فقط از طریق Multicast Local

مثال‌های اولیه از اجرای دستور Resolve-DnsName

مثال ۱: جستجوی استاندارد DNS

برای انجام یک جستجوی ساده و دریافت IP دامنه:

Resolve-DnsName parspack.com

خروجی شامل اطلاعاتی مانند IP آدرس، TTL، Type (نوع رکورد)، و Name خواهد بود. می‌توانید خروجی را به‌صورت جدول مرتب نیز مشاهده کنید:

Resolve-DnsName parspack.com | Format-Table -AutoSize

مثال ۲: اجرای دستور بدون فایل میزبان (Host File)

در این حالت، پاورشل بدون استفاده از فایل‌ های محلی میزبان و صرفاً از طریق سرور DNS واقعی، دامنه را بررسی می‌کند:

Resolve-DnsName parspack.com -NoHostsFile

این روش زمانی مفید است که بخواهید نتیجه‌ی واقعی DNS را بدون تأثیر تغییرات محلی مشاهده کنید.

مثال ۳: جستجو فقط در حافظه نهان (Cache Only)

اگر می‌خواهید بررسی کنید آیا دامنه‌ ای قبلاً در Cache سیستم ذخیره شده یا خیر:

Clear-DnsClientCache

Resolve-DnsName parspack.com -CacheOnly

اگر نتیجه‌ای برنگردد، یعنی داده‌ ی مورد نظر در حافظه نهان موجود نیست.

مثال ۴: مشخص‌کردن DNS Server خاص

می‌توانید درخواست خود را به سرور DNS مورد نظر (مثلاً Google DNS با IP 8.8.8.8) ارسال کنید:

Resolve-DnsName parspack.com -Server 8.8.8.8 | Format-List

این قابلیت برای مقایسه پاسخ بین چند سرور DNS بسیار مفید است.

مثال ۵: بررسی سوابق AAAA (IPv6)

برای مشاهده‌ی آدرس IPv6 دامنه‌ ها:

Resolve-DnsName facebook.com -Type AAAA | Format-List

مثال ۶: جستجوی محلی با LLMNR Only

اگر بخواهید فقط کامپیوترهای موجود در شبکه محلی را از طریق Multicast جستجو کنید:

Resolve-DnsName dc01 -LlmnrOnly | Format-Table -AutoSize

۵. مثال پیشرفته: وضوح نام سه‌ گانه (Triple Name Resolution)

برای جستجوی چند دامنه به صورت همزمان، می‌توانید از ساختار زیر استفاده کنید:

“parspack.com”,”facebook.com”,”cnn.com” | Resolve-DnsName -Type A | Format-Table -AutoSize

یا با استفاده از nslookup در حلقه ForEach:

“parspack.com”,”facebook.com”,”cnn.com” | ForEach-Object { nslookup $_ }

۶. اجرای Resolve-DnsName بر اساس اتصالات TCP

یکی از قابلیت‌های جذاب پاورشل، ترکیب دستورات مختلف است.
به عنوان مثال، ابتدا اتصالات فعلی TCP را با دستور زیر می‌بینید:

Get-NetTCPConnection

سپس می‌توانید یکی از IP ها را برای شناسایی DNS آن استفاده کنید:

Resolve-DnsName (Get-NetTCPConnection -State Established -LocalPort 12518).RemoteAddress -Type PTR | Select-Object NameHost

به این ترتیب، پاورشل آدرس IP مورد نظر را به نام میزبان معکوس (Reverse DNS) تبدیل می‌کند.

۷. مزایای استفاده از Resolve-DnsName در مدیریت شبکه

  • نمایش دقیق اطلاعات رکوردهای DNS با ساختار استاندارد
  • مناسب برای اسکریپت‌ نویسی و اتوماسیون در شبکه‌ های بزرگ
  • امکان مقایسه عملکرد DNS های مختلف
  • قابلیت بررسی IPv4 و IPv6 در یک دستور
  • پشتیبانی از پردازش همزمان چندین دامنه

اگر در محیط‌های سازمانی نیاز به عملکرد پایدار و DNS Query های بدون قطعی دارید، استفاده از سرور ابری ابرآراد با منابع مقیاس‌ پذیر می‌تواند لایه‌ی تداوم سرویس شما را تضمین کند.

در این بخش آموختیم که دستور Resolve-DnsName نسخه مدرن، دقیق و شیء‌محور ابزار Nslookup است و با آن می‌توان وضعیت دامنه‌ها، رکوردهای DNS، حافظه نهان و سرورهای مختلف را بررسی کرد.

کاربردهای پیشرفته، مدیریت خطا و اسکریپت‌ های شبکه‌ ای

تا اینجا با ساختار و مثال‌های پایه‌ی دستور Resolve-DnsName آشنا شدیم. اکنون در این بخش، به سطح حرفه‌ای‌تر می‌رویم: بررسی نحوه استفاده از این دستور در اسکریپت‌ های واقعی، رفع خطاها، استخراج داده‌ ها و ترکیب آن با سایر ابزارهای شبکه‌ای ویندوز.

ترکیب Resolve-DnsName با دستورات شبکه‌ ای دیگر

یکی از قدرت‌های بزرگ PowerShell در مقایسه با Command Prompt، امکان اتصال خروجی یک دستور به ورودی دستور دیگر است (Pipeline).
به این ترتیب می‌توانید داده‌ های DNS را مستقیماً در تحلیل شبکه، مانیتورینگ یا گزارشگیری استفاده کنید.

مثال ۱: بررسی در دسترس بودن دامنه‌ ها به همراه IP

$domains = “google.com”,”facebook.com”,”parspack.com”,”aradcloud.ir”

foreach ($site in $domains) {

    $result = Resolve-DnsName $site -ErrorAction SilentlyContinue

    if ($result) {

        Write-Host “$site → $($result.IPAddress)” -ForegroundColor Green

    } else {

        Write-Host “$site قابل‌دسترسی نیست.” -ForegroundColor Red

    }

}

مثال ۲: ترکیب با دستور Test-NetConnection

اگر بخواهید علاوه بر DNS، وضعیت ارتباط TCP را نیز بسنجید، ترکیب این دو دستور مفید است:

$domain = “parspack.com”

$dns = Resolve-DnsName $domain

$ip = $dns.IPAddress

Test-NetConnection -ComputerName $ip -Port 443

در این مثال، ابتدا IP دامنه استخراج می‌شود و سپس اتصال پورت ۴۴۳ (HTTPS) بررسی می‌گردد.
این روش برای مدیران شبکه در عیب‌ یابی وب‌ سایت‌ ها و سرویس‌ ها بسیار کاربردی است.

اجرای خودکار جستجوی DNS در قالب اسکریپت

فرض کنید بخواهید هر روز در ساعت مشخصی چند دامنه را بررسی و نتایج را در فایل ذخیره کنید.
با استفاده از PowerShell می‌توانید چنین گزارش خودکاری بسازید:

$domains = “aradcloud.ir”,”pars-pack.com”,”microsoft.com”

$logFile = “C:\DNSReport.txt”

$date = Get-Date -Format “yyyy-MM-dd HH:mm:ss”

Add-Content $logFile “—— گزارش بررسی DNS در تاریخ $date ——“

foreach ($domain in $domains) {

    try {

        $result = Resolve-DnsName $domain -ErrorAction Stop

        Add-Content $logFile “$domain → $($result.IPAddress)”

    }

    catch {

        Add-Content $logFile “$domain → خطا در برقراری ارتباط با DNS.”

    }

}

Write-Host “گزارش ذخیره شد در مسیر: $logFile”

خروجی این اسکریپت به شکل یک فایل متنی است که شامل آدرس IP یا خطاهای احتمالی هر دامنه است؛ مناسب برای مانیتورینگ روزانه شبکه یا زیرساخت ابری.

مدیریت خطاها در Resolve-DnsName

در برخی شرایط مانند قطعی DNS Server یا پاسخ ناقص از رکوردها، ممکن است خطاهایی مانند زیر نمایش داده شود:

  • Resolve-DnsName : DNS name does not exist
  • No response from DNS server
  • Query refused

برای جلوگیری از توقف اسکریپت در این حالت‌ها، از ساختار زیر استفاده کنید:

try {

    Resolve-DnsName “nonexistentdomain.ir” -ErrorAction Stop

}

catch {

    Write-Host “خطا در دریافت پاسخ از DNS: $($_.Exception.Message)” -ForegroundColor Yellow

}

این روش باعث می‌شود اسکریپت ادامه یابد و خطا در خروجی فقط به‌صورت پیام نمایش داده شود.

از مطالعه تا انتخابسرویس مناسب پروژه‌تان را بررسی کنید.

محصولات ابر آراد را ببینید و مشخصات هر سرویس را مقایسه کنید.

بررسی محصولات

مقایسه Resolve-DnsName با دستورات مشابه

دستورعملکرد اصلیمزایامحدودیت‌ها
Resolve-DnsNameجستجوی DNS و رکوردهای A, MX, AAAAدقیق، شیء‌محور، مناسب برای اسکریپت‌هانیازمند نسخه 4.0+ پاورشل
Test-NetConnectionتست اتصال شبکه و پورت‌هابررسی TCP و Ping هم‌زمانخروجی محدودتر از نظر DNS
Get-Hostنمایش اطلاعات کلی سیستممناسب برای محیط محلیفقط اطلاعات لوکال
Nslookupابزار کلاسیک ویندوزدر دسترس در همه نسخه‌هاخروجی متنی و غیرقابل پردازش

نتیجه: اگر هدف شما بررسی رکوردهای DNS و گزارشگیری دقیق است، Resolve-DnsName بهترین انتخاب است.

استفاده از Resolve-DnsName در شبکه‌ های داخلی و سرورهای ویندوز

در محیط‌های Domain-based یا شبکه‌ های سازمانی، معمولاً چندین DNS داخلی وجود دارد.
با دستور زیر می‌توانید DNS های داخلی و خارجی را باهم مقایسه کنید:

$domain = “intranet.company.local”

Resolve-DnsName $domain -Server 192.168.1.2

Resolve-DnsName $domain -Server 8.8.8.8

این مقایسه به مدیر شبکه نشان می‌دهد که آیا رکوردها فقط در DNS داخلی تعریف شده‌اند یا در اینترنت نیز قابل مشاهده‌اند.
در شبکه‌ هایی که حجم زیادی از Query های داخلی یا رکوردهای سازمانی مدیریت می‌شود، انتقال سرویس DNS به یک ابر خصوصی می‌تواند Latency داخلی را کاهش دهد و مدیریت را متمرکزتر کند.

نکات امنیتی هنگام استفاده از Resolve-DnsName

  • همیشه بررسی کنید که اسکریپت شما از منابع معتبر DNS (مثل 8.8.8.8 یا Cloudflare 1.1.1.1) استفاده کند.
  • از اجرای اسکریپت‌ هایی که دامنه‌ ها را از ورودی‌های ناشناس می‌گیرند خودداری کنید.
  • هنگام ثبت نتایج، از مسیرهای امن مثل C:\Logs\ استفاده کنید تا دسترسی کاربران محدود باشد.
  • در شبکه‌ های بزرگ، گزارش‌های Resolve-DnsName می‌توانند اطلاعات حساس (مثل IP سرورها) را آشکار کنند؛ آن‌ها را رمزگذاری یا در مسیر محافظت‌ شده ذخیره کنید.

در سناریوهایی که DNS داخلی، رکوردهای حساس یا کوئری‌ های امنیتی را مدیریت می‌کنید، استقرار این سرویس‌ها روی یک ابر خصوصی ایزوله‌ شده، خروجی پایدارتر و امنیت کنترل‌ شده‌ تری ارائه می‌دهد.

بهینه‌ سازی عملکرد در جستجوهای گسترده

اجرای اسکریپت‌ های گسترده‌ی DNS معمولاً روی سرور ابری سرعت و پایداری بیشتری دارد، چون منابع پردازشی به صورت پویا قابل افزایش هستند.
اگر قصد دارید صدها دامنه را بررسی کنید، به‌جای حلقه‌های متوالی از ساختار Job یا Parallel Execution استفاده کنید تا پاورشل بتواند چند جستجو را همزمان انجام دهد:

$domains = “aradcloud.ir”,”parspack.com”,”google.com”,”microsoft.com”

$jobs = @()

foreach ($domain in $domains) {

    $jobs += Start-Job -ScriptBlock {

        param($d)

        Resolve-DnsName $d -ErrorAction SilentlyContinue

    } -ArgumentList $domain

}

$results = Receive-Job -Job $jobs -Wait -AutoRemoveJob

$results | Select-Object Name,IPAddress

این روش در سیستم‌ های چند‌ هسته‌ای سرعت اجرای جستجوها را چند برابر افزایش می‌دهد.

رفع خطاهای رایج در دستور Resolve-DnsName

خطاعلت احتمالیراه‌حل پیشنهادی
DNS name does not existدامنه اشتباه یا حذف‌شدهبررسی صحت دامنه یا استفاده از سرور DNS دیگر
No response from serverفیلتر DNS یا قطعی ارتباطبررسی پینگ به DNS Server
Query refusedسیاست‌های امنیتی DNS مقصدتغییر سرور به 8.8.8.8 یا 1.1.1.1
Resolve-DnsName not recognizedپاورشل قدیمی‌تر از نسخه 4به‌روزرسانی PowerShell یا استفاده از Nslookup
Access Deniedاجرای بدون دسترسی ادمیناجرای PowerShell با Run as Administrator

نمونه اسکریپت گزارشگیری DNS برای مدیران شبکه

در این مثال، همه رکوردهای A و MX چند دامنه را جمع‌آوری و در فایل CSV ذخیره می‌کنیم:

$domains = “parspack.com”,”aradcloud.ir”,”example.com”

$results = @()

foreach ($d in $domains) {

    $a = Resolve-DnsName $d -Type A -ErrorAction SilentlyContinue

    $mx = Resolve-DnsName $d -Type MX -ErrorAction SilentlyContinue

    $results += [PSCustomObject]@{

        Domain = $d

IP = (($a | Select-Object -ExpandProperty IPAddress) -join ‘, ‘)

        MX = ($mx | Select-Object -ExpandProperty NameExchange)

    }

}

$results | Export-Csv -Path “C:\DNS-Report.csv” -NoTypeInformation -Encoding UTF8

Write-Host “گزارش DNS با موفقیت در مسیر C:\DNS-Report.csv ذخیره شد.”

نتیجه: یک گزارش دقیق از رکوردهای DNS که برای پایش دامنه‌ ها یا بررسی تنظیمات سرور ایمیل بسیار مفید است.

جمع‌بندی

در این مقاله آموختیم که دستور Resolve-DnsName صرفاً یک ابزار ساده برای گرفتن IP نیست، بلکه یکی از مؤلفه‌های مهم در مدیریت زیرساخت DNS و اتوماسیون شبکه است.

با یادگیری این مباحث می‌توانید:

  • اسکریپت‌ های بررسی وضعیت دامنه و رکوردهای DNS بسازید.
  • اتصالات TCP و Ping را همزمان تست کنید.
  • داده‌ های DNS را در فایل‌ های گزارش خروجی بگیرید.
  • و خطاهای احتمالی را به‌صورت خودکار مدیریت نمایید.

سوالات متداول

1- در چه نسخه‌ای از پاورشل دستور Resolve-DnsName پشتیبانی می‌شود؟

از نسخه PowerShell 4.0 به بالا (Windows 8.1 و 10) به‌صورت پیش‌فرض فعال است.

2- آیا می‌توان از این دستور در لینوکس هم استفاده کرد؟

بله، اگر از PowerShell Core (نسخه کراس‌ پلتفرم) استفاده کنید، اما نیاز به DNS Resolver مناسب دارد.

3- آیا امکان استفاده از آن در سرورهای ویندوز Core وجود دارد؟

بله، این دستور یکی از ابزارهای اصلی عیب‌ یابی در سرورهای Core است و بدون رابط گرافیکی اجرا می‌شود.

4- چگونه نتایج را در JSON خروجی بگیریم؟

می‌توانید از ConvertTo-Json استفاده کنید:

Resolve-DnsName aradcloud.com | ConvertTo-Json | Out-File “C:\dns.json”

چک‌لیست عیب‌یابی DNS با خروجی قابل مقایسه

پیش از تغییر DNS، نتیجهٔ درخواست را ثبت کنید تا بتوانید وضعیت قبل و بعد را مقایسه کنید. نام دامنه، نوع رکورد، آدرس DNS پاسخ‌گو و زمان آزمون باید روشن باشند. یک پاسخ موفق DNS به‌تنهایی سالم بودن وب‌سرور، گواهی HTTPS یا مسیر شبکه را اثبات نمی‌کند.

Resolve-DnsName -Name example.com -Type A -DnsOnly
Resolve-DnsName -Name example.com -Type AAAA -DnsOnly
Resolve-DnsName -Name example.com -Type MX -DnsOnly

این مثال‌ها برای پرس‌وجو هستند و رکورد دامنه را تغییر نمی‌دهند. برای مقایسه با یک DNS مشخص، پارامتر -Server را با آدرس سروری که مجاز به استفاده از آن هستید اضافه کنید. خطای timeout را از پاسخ «نام وجود ندارد» جدا کنید؛ اولی می‌تواند به ارتباط یا پاسخ‌گویی سرور مربوط باشد، درحالی‌که دومی نتیجهٔ متفاوتی است. سپس نوع رکورد، نام واردشده و تنظیمات مرجع دامنه را بررسی کنید.

جزئیات پارامترهای -DnsOnly، -Type و -Server را در مرجع رسمی Resolve-DnsName مایکروسافت ببینید. برای مبانی نام‌گذاری، راهنمای DNS و برای بررسی تنظیمات پیرامونی، راهنمای NAT را بخوانید.

قدم بعدی شمابرای انتخاب سرویس، درباره نیاز پروژه صحبت کنیم.

از صفحه تماس ابر آراد، مسیر ارتباط با تیم را انتخاب کنید.

گفت‌وگو با تیم آراد
به انتهای این مقاله رسیدید. مسیر یادگیری را با مقاله‌های دیگر ادامه دهید.
گفت‌وگو درباره این مقاله

دیدگاه‌ها و پرسش‌های شما

تجربه یا پرسش خود را درباره موضوع مقاله با ما در میان بگذارید.

هنوز دیدگاهی ثبت نشده است؛ شما گفت‌وگو را شروع کنید.

دیدگاه خود را بنویسید

نشانی ایمیل شما نمایش داده نمی‌شود. فیلدهای ستاره‌دار الزامی هستند.