پاورشل (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
| ویژگی | Nslookup | Resolve-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”


