PowerShell را مثل CMD با دستورهای جدید یاد نمیگیری؛ باید طرز فکرش را بفهمی
قدرت اصلی PowerShell در Object، Property، Pipeline، Filter و Automation است. اگر فقط اسم Cmdletها را حفظ کنی بخش مهم PowerShell را از دست میدهی. در این پک هر خروجی را میخوانیم و مشخص میکنیم نتیجه چه معنایی دارد و قدم بعدی چیست
PowerShell را از Windows 11 درست باز کن
در Windows 11 میتوانی PowerShell را از Search پیدا کنی. برای بیشتر دستورهای مشاهدهای نیازی به Administrator نیست. فقط وقتی یک دستور واقعاً به دسترسی بالاتر نیاز دارد PowerShell را با Run as administrator باز کن




اگر Title Bar عبارت Administrator را دارد PowerShell با دسترسی Administrator اجرا شده است. فقط زمانی PowerShell را با دسترسی Administrator باز کن که دستور واقعاً به آن نیاز داشته باشد
فرق مهم PowerShell با CMD: خروجی فقط متن نیست
در CMD معمولاً خروجی را بهشکل متن میبینی. در PowerShell بسیاری از دستورها Object میسازند. Object یعنی داده دارای Property مثل Name، Status، IPAddress و LinkSpeed. Pipeline میتواند همین Object را به Cmdlet بعدی بدهد تا دقیق Filter، Select، Sort یا Export شود
Get-NetAdapter |
Where-Object Status -eq 'Up' |
Select-Object Name,LinkSpeed,MacAddress
در این مثال رشته متن را Search نمیکنیم. PowerShell Property واقعی Status را بررسی میکند و بعد Propertyهای موردنیاز را انتخاب میکند
Get-Command و Get-Help؛ بهجای حفظ کردن، خود PowerShell را سؤال کن
در PowerShell تعداد Cmdletها زیاد است و قرار نیست همه آنها را حفظ کنی. کار حرفهای این است که بتوانی دستور مناسب را پیدا کنی و Syntax آن را از Help بخوانی
دستور
Get-Command *Net*
Get-Help Get-NetAdapter
Get-Help Get-NetAdapter -Examples
Get-Help Test-NetConnection -Full
نمونه خروجی و نحوه خواندن آن
CommandType Name Version Source
----------- ---- ------- ------
Function Test-NetConnection 1.0.0.0 NetTCPIP
Cmdlet Get-NetAdapter 2.0.0.0 NetAdapter
NAME
Get-NetAdapter
SYNOPSIS
Gets the basic network adapter properties.
| بخش خروجی | معنی آن |
|---|---|
CommandType | مشخص میکند مورد پیدا شده Cmdlet، Function، Alias یا نوع دیگری است |
Name | نام دستوری است که اجرا میکنی |
Source | Module یا منبعی است که دستور از آن آمده |
-Examples | مثالهای رسمی همان Cmdlet را نشان میدهد |
اگر این را دیدی یعنی چه؟
- Get-Command چیزی پیدا نکردSpelling، Module و نسخه Windows/PowerShell را بررسی کن
- Help خیلی کوتاه بودممکن است Help محلی کامل نباشد؛ Help Online یا مستندات رسمی همان Cmdlet را بررسی کن
قبل از اجرای Cmdlet تغییردهنده، Help پارامترهای آن را بخوان و اگر Cmdlet از WhatIf پشتیبانی میکند ابتدا اثر احتمالی را بررسی کن
اسم دقیق Cmdlet مربوط به Route یادت نیست. بهجای حدس، Get-Command *Route* میزنی و Cmdletهای NetTCPIP مربوط به Route را پیدا میکنی
$PSVersionTable؛ اول بفهم با Windows PowerShell 5.1 کار میکنی یا PowerShell 7
Windows PowerShell 5.1 و PowerShell 7 کنار هم قابل نصباند و یک محصول واحد با Version متفاوت نیستند. بعضی Moduleهای Windows در Windows PowerShell 5.1 در دسترساند و رفتار بعضی Cmdletها بین محیطها میتواند متفاوت باشد
دستور
$PSVersionTable
نمونه خروجی و نحوه خواندن آن
Name Value
---- -----
PSVersion 5.1.22621.2428
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.22621.2428
| بخش خروجی | معنی آن |
|---|---|
PSVersion | نسخه PowerShell همین Session است |
PSEdition: Desktop | معمولاً نشاندهنده Windows PowerShell 5.1 است |
PSEdition: Core | در PowerShell 7 دیده میشود |
اگر این را دیدی یعنی چه؟
- Cmdlet در یک سیستم هست و در سیستم دیگر نیستنسخه PowerShell، Windows و Moduleهای نصبشده را مقایسه کن
- راهنمای اینترنتی مربوط به PowerShell 7 بود ولی سیستم 5.1 استCompatibility همان Cmdlet را قبل از استفاده بررسی کن
نسخه را در Ticketهای پیچیده ثبت کن چون برای عیبیابی Script و Module اطلاعات مهمی است
یک Script روی لپتاپ تو اجرا میشود ولی روی Server قدیمی خطا میدهد. اولین مقایسه باید Version و Module Availability باشد
Object و Pipeline؛ مهمترین تفاوت فکری PowerShell با CMD
PowerShell فقط متن را از یک دستور به دستور بعدی نمیفرستد. بسیاری از Cmdletها Object تولید میکنند که Property و Method دارند. اگر این مفهوم را بفهمی، فیلتر کردن و گزارشگیری خیلی دقیقتر میشود
دستور
Get-Service | Get-Member
Get-NetAdapter | Get-Member
نمونه خروجی و نحوه خواندن آن
TypeName: Microsoft.Management.Infrastructure.CimInstance#ROOT/StandardCimv2/MSFT_NetAdapter
Name MemberType Definition
---- ---------- ----------
InterfaceDescription Property string InterfaceDescription
LinkSpeed Property ulong LinkSpeed
MacAddress Property string MacAddress
Name Property string Name
Status Property string Status
| بخش خروجی | معنی آن |
|---|---|
TypeName | نوع Object خروجی را نشان میدهد |
Property | دادهای است که میتوانی Select، Filter یا Sort کنی |
Method | عملی است که Object میتواند ارائه دهد |
اگر این را دیدی یعنی چه؟
- جدول پیشفرض یک Property را نشان ندادبه این معنی نیست که Property وجود ندارد؛ با Get-Member یا Format-List * بررسی کن
- میخواهی فقط Adapterهای Up را ببینیبهجای جستجوی متن از Property Status در Where-Object استفاده کن
از این بخش به بعد خروجی را بهعنوان Object ببین، نه فقط چیزی که روی صفحه چاپ شده
Get-NetAdapter فقط چند ستون نشان میدهد ولی برای گزارش Driver به Property بیشتری نیاز داری. Get-Member و Select-Object به تو نشان میدهند چه دادههایی قابل استفادهاند
Select-Object؛ فقط ستونهایی را نگه دار که برای عیبیابی لازم داری
خروجی زیاد میتواند مهمترین نکته را پنهان کند. Select-Object به تو اجازه میدهد Propertyهای لازم را انتخاب کنی و گزارش خواناتر بسازی
دستور
Get-NetAdapter | Select-Object Name,Status,LinkSpeed,MacAddress
نمونه خروجی و نحوه خواندن آن
Name Status LinkSpeed MacAddress
---- ------ --------- ----------
Ethernet Up 1 Gbps 4C-52-62-11-22-33
Wi-Fi Up 866 Mbps 80-11-22-AA-BB-CC
| بخش خروجی | معنی آن |
|---|---|
Name | نام Interface در Windows است |
Status | Up یا Down بودن Adapter را نشان میدهد |
LinkSpeed | سرعت Link گزارششده توسط Adapter است، نه تضمین سرعت واقعی اینترنت |
MacAddress | MAC همان Adapter است |
اگر این را دیدی یعنی چه؟
- LinkSpeed پایینتر از انتظار بودکابل، Negotiation، Switch Port، Driver و تنظیمات Adapter را بررسی کن
- Status Down بوداول اتصال فیزیکی، Disabled بودن Adapter و Driver را بررسی کن
بعد از انتخاب ستونها میتوانی خروجی را Export-Csv کنی تا برای Ticket یا مستندسازی نگه داری
میخواهی مشخصات کارت شبکه ۳۰ سیستم را مقایسه کنی. گزارش چهار Property مشخص خیلی مفیدتر از خروجی کامل و شلوغ است
Where-Object؛ خروجی را بر اساس شرط واقعی فیلتر کن
Where-Object روی Propertyهای Object شرط میگذارد. این یعنی بهجای جستجوی متن میتوانی دقیقاً بگویی فقط Serviceهای Stopped یا Adapterهای Up را نشان بده
دستور
Get-NetAdapter | Where-Object Status -eq 'Up'
Get-Service | Where-Object Status -eq 'Stopped'
نمونه خروجی و نحوه خواندن آن
Name InterfaceDescription ifIndex Status
---- -------------------- ------- ------
Ethernet Intel(R) Ethernet Connection 12 Up
Wi-Fi Intel(R) Wi-Fi 6 AX201 19 Up
| بخش خروجی | معنی آن |
|---|---|
-eq | برابر بودن را بررسی میکند |
$_ | در ScriptBlock نماینده Object فعلی Pipeline است |
Status | Propertyای است که شرط روی آن اجرا میشود |
اگر این را دیدی یعنی چه؟
- هیچ خروجی ندیدیممکن است هیچ Objectی با شرط تو منطبق نباشد یا نام Property/Value اشتباه باشد
- شرط متنی پیچیدهتر لازم شدمیتوانی -like، -match، -ne، -gt و Operatorهای دیگر را بر اساس نوع Property استفاده کنی
فیلتر را تا جای ممکن نزدیک به منبع داده انجام بده و بعد فقط Propertyهای لازم را Select کن
روی سیستم چند Adapter مجازی وجود دارد و فقط Adapterهای فعال را میخواهی. Where-Object خروجی را به همان موارد محدود میکند
Sort-Object و Measure-Object؛ داده را مرتب و خلاصه کن
Sort-Object برای مرتبسازی و Group/Measure برای خلاصهکردن داده مفیدند. وقتی صدها Object داری، این ابزارها کمک میکنند الگوی مهم را سریعتر ببینی
تمرین
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10
Get-Service | Group-Object Status
Format-Table و Format-List؛ فقط در انتهای Pipeline برای نمایش
Format-* برای نمایش است. اگر قرار است داده را بعداً Export یا Filter کنی، Format را زود در Pipeline نگذار چون Objectهای Formatting تولید میکند
تمرین
Get-NetAdapter | Format-Table Name,Status,LinkSpeed
Get-NetAdapter -Name Ethernet | Format-List *
Variableها؛ نتیجه را نگه دار و چند بار استفاده کن
Variable با $ شروع میشود و میتواند Object کامل را نگه دارد. این یعنی لازم نیست دستور پرهزینه را چند بار اجرا کنی و میتوانی Propertyهای همان Object را جدا بخوانی
تمرین
$nic = Get-NetAdapter -Name 'Ethernet'
$nic.Status
$nic.MacAddress
Get-NetAdapter؛ کارت شبکه را از دید Windows دقیق بخوان
قبل از بررسی IP و DNS، مطمئن شو Adapter درست فعال است، Link دارد و روی همان Interfaceی کار میکنی که به شبکه مورد نظر وصل است
دستور
Get-NetAdapter
Get-NetAdapter -Physical
Get-NetAdapter -Name 'Ethernet' | Format-List *
نمونه خروجی و نحوه خواندن آن
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Ethernet Intel(R) Ethernet Connection 12 Up 4C-52-62-11-22-33 1 Gbps
Wi-Fi Intel(R) Wi-Fi 6 AX201 19 Up 80-11-22-AA-BB-CC 866 Mbps
| بخش خروجی | معنی آن |
|---|---|
ifIndex | شناسه Interface است و در Cmdletهای دیگر شبکه هم استفاده میشود |
Status: Up | Adapter فعال است و از دید Windows Link دارد |
LinkSpeed | سرعت Link Negotiated شده است |
InterfaceDescription | مدل یا Description سختافزاری Adapter است |
اگر این را دیدی یعنی چه؟
- Status DisabledAdapter غیرفعال است و باید علت غیرفعال بودن مشخص شود
- Status Disconnectedبرای Ethernet کابل/Port و برای Wi-Fi اتصال شبکه را بررسی کن
- چند Adapter مشابه دیدیifIndex و InterfaceDescription را برای تشخیص دقیق استفاده کن
اگر Adapter سالم و Up است، Get-NetIPConfiguration را اجرا کن تا IP، Gateway و DNS را در همان Interface ببینی
کاربر میگوید LAN قطع است. Get-NetAdapter نشان میدهد Ethernet روی Disconnected است ولی Wi-Fi Up است. قبل از تغییر IP سراغ کابل و Port میروی
Get-NetIPConfiguration؛ نسخه PowerShellیِ نگاه سریع به IP، Gateway و DNS
این Cmdlet اطلاعات مهم IP Configuration را بهصورت Object میدهد و برای Support معمولاً یکی از سریعترین راهها برای دیدن Interface، IPv4، Gateway و DNS است
دستور
Get-NetIPConfiguration
Get-NetIPConfiguration -InterfaceAlias 'Ethernet'
نمونه خروجی و نحوه خواندن آن
InterfaceAlias : Ethernet
InterfaceIndex : 12
IPv4Address : 192.168.10.25
IPv4DefaultGateway : 192.168.10.1
DNSServer : 192.168.10.10
NetProfile.Name : corp.local
| بخش خروجی | معنی آن |
|---|---|
InterfaceAlias | نام Adapter مورد بررسی است |
IPv4Address | IP فعلی Interface است |
IPv4DefaultGateway | Gateway پیشفرض IPv4 همان Interface است |
DNSServer | DNS Serverهای مرتبط با Interface را نشان میدهد |
اگر این را دیدی یعنی چه؟
- IPv4DefaultGateway خالی بوداین Interface Default Gateway ندارد؛ بررسی کن طراحی شبکه همین را میخواهد یا نه
- IPv4Address از محدوده مورد انتظار نبودDHCP، VLAN، Static IP یا Adapter اشتباه را بررسی کن
- DNS Server با Domain Design نمیخواندName Resolution و تنظیم DNS Client را بررسی کن
اگر IP منطقی است، Test-NetConnection را برای Gateway، DNS Server یا سرویس مقصد اجرا کن
Client عضو Domain است ولی Login و GPO کند شده. Get-NetIPConfiguration نشان میدهد DNS روی یک DNS عمومی تنظیم شده؛ این اختلاف با طراحی شبکه یک سرنخ جدی است
Get-NetIPAddress؛ وقتی جزئیات آدرس و Prefix مهم است
Get-NetIPConfiguration برای نگاه سریع خوب است، اما Get-NetIPAddress اطلاعات دقیقتری درباره آدرسهای IPv4/IPv6، PrefixLength و وضعیت Address میدهد
دستور
Get-NetIPAddress -AddressFamily IPv4
Get-NetIPAddress -InterfaceAlias 'Ethernet' -AddressFamily IPv4
نمونه خروجی و نحوه خواندن آن
IPAddress : 192.168.10.25
InterfaceIndex : 12
InterfaceAlias : Ethernet
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Dhcp
AddressState : Preferred
| بخش خروجی | معنی آن |
|---|---|
PrefixLength: 24 | معادل Subnet Mask رایج 255.255.255.0 است |
PrefixOrigin: Dhcp | آدرس از DHCP آمده است |
AddressState: Preferred | آدرس برای استفاده عادی در وضعیت مناسب است |
اگر این را دیدی یعنی چه؟
- PrefixOrigin: ManualIP بهصورت دستی تنظیم شده یا از منبع Manual آمده است
- AddressState DuplicateWindows تکراری بودن آدرس را تشخیص داده و باید IP Conflict را بررسی کنی
اگر Origin و Prefix با انتظار شبکه نمیخواند، قبل از تغییر IP Plan و DHCP Scope را بررسی کن
قرار بوده Client DHCP باشد ولی PrefixOrigin=Manual است. حالا میفهمی چرا تغییر Scope DHCP روی این Client اثر نکرده است
Get-NetRoute؛ Routing Table را بهصورت Object تحلیل کن
در سیستم دارای VPN، چند NIC یا Route سفارشی، مسیر واقعی ممکن است با چیزی که فقط از Gateway میبینی فرق داشته باشد
دستور
Get-NetRoute -AddressFamily IPv4
Get-NetRoute -DestinationPrefix '0.0.0.0/0' | Sort-Object RouteMetric
نمونه خروجی و نحوه خواندن آن
ifIndex DestinationPrefix NextHop RouteMetric ifMetric PolicyStore
------- ----------------- ------- ----------- -------- -----------
12 0.0.0.0/0 192.168.10.1 25 25 ActiveStore
42 0.0.0.0/0 10.8.0.1 1 5 ActiveStore
| بخش خروجی | معنی آن |
|---|---|
DestinationPrefix 0.0.0.0/0 | Default Route IPv4 است |
NextHop | Gateway یا Hop بعدی برای آن Route است |
RouteMetric | بخشی از اولویت Route است |
ifIndex | Interface مورد استفاده Route را مشخص میکند |
اگر این را دیدی یعنی چه؟
- دو Default Route دیدیVPN یا چند Adapter را بررسی کن و ببین کدام Route عملاً ترجیح داده میشود
- NextHop غیرمنتظره بودقبل از حذف Route بفهم کدام نرمافزار یا VPN آن را ساخته است
در سطح Support اول فقط Read و Compare کن. تغییر Route بدون شناخت Topology میتواند ارتباط Remote را قطع کند
بعد از اتصال VPN، اینترنت کاربر از VPN عبور میکند. Get-NetRoute دو Default Route نشان میدهد و Metric مسیر VPN کمتر است
Get-NetNeighbor؛ ARP/Neighbor Cache را با PowerShell بخوان
این Cmdlet Neighbor Cache را نشان میدهد و برای بررسی ارتباط Local، Gateway و بعضی سناریوهای IP Conflict یا MAC Mapping مفید است
دستور
Get-NetNeighbor -AddressFamily IPv4
Get-NetNeighbor -IPAddress 192.168.10.1
نمونه خروجی و نحوه خواندن آن
ifIndex IPAddress LinkLayerAddress State
------- --------- ---------------- -----
12 192.168.10.1 00-11-22-33-44-55 Reachable
12 192.168.10.20 00-AA-BB-CC-DD-EE Stale
| بخش خروجی | معنی آن |
|---|---|
LinkLayerAddress | MAC شناختهشده برای IP است |
Reachable | Neighbor اخیراً قابل دسترس تشخیص داده شده |
Stale | Entry وجود دارد ولی برای اطمینان از Reachability نیاز به Refresh دارد |
اگر این را دیدی یعنی چه؟
- MAC برای IP مهم با انتظار فرق داشتDHCP Lease، Asset List و Switch MAC Table را مقایسه کن
- Entry وجود نداشتممکن است هنوز برای آن IP ارتباط Local انجام نشده باشد یا مقصد در Subnet محلی نباشد
Neighbor Cache را بهتنهایی دلیل قطعی خرابی یا سلامت سرویس در نظر نگیر
Gateway IP درست است اما رفتار ارتباط Local غیرعادی است. Get-NetNeighbor به تو MAC فعلی Gateway را میدهد تا با اطلاعات شبکه مقایسه کنی
Get-DnsClientServerAddress؛ دقیقاً ببین هر Interface از چه DNSی استفاده میکند
در سیستم دارای Ethernet، Wi-Fi، VPN و Adapter مجازی، دیدن یک DNS کلی کافی نیست. این Cmdlet DNS Serverهای هر Interface را جدا نمایش میدهد
دستور
Get-DnsClientServerAddress -AddressFamily IPv4
Get-DnsClientServerAddress -InterfaceAlias 'Ethernet'
نمونه خروجی و نحوه خواندن آن
InterfaceAlias InterfaceIndex AddressFamily ServerAddresses
-------------- -------------- ------------- ---------------
Ethernet 12 IPv4 {192.168.10.10, 192.168.10.11}
Wi-Fi 19 IPv4 {192.168.1.1}
| بخش خروجی | معنی آن |
|---|---|
InterfaceAlias | DNS مربوط به کدام Interface است |
ServerAddresses | DNS Serverهای تنظیمشده برای همان Interface هستند |
AddressFamily | IPv4 یا IPv6 بودن لیست را مشخص میکند |
اگر این را دیدی یعنی چه؟
- Ethernet Domain DNS دارد ولی Wi-Fi DNS خانگی داردببین Traffic و Name Resolution واقعاً از کدام Interface استفاده میشود
- لیست خالی بودممکن است DNS روی آن Interface تنظیم نشده باشد یا وضعیت Configuration را باید بیشتر بررسی کنی
بعد از مشخص شدن DNS، Resolve-DnsName را برای نام داخلی و خارجی اجرا کن
نام داخلی فقط وقتی کابل LAN وصل است Resolve میشود. مقایسه DNS هر Interface دلیل تفاوت رفتار را روشن میکند
Resolve-DnsName؛ نسخه قدرتمندتر PowerShell برای Query کردن DNS
Resolve-DnsName Query DNS را با خروجی Object انجام میدهد و برای دیدن Record Type و پاسخ دقیق مناسب است
دستور
Resolve-DnsName file01.company.local
Resolve-DnsName company.local -Type A
Resolve-DnsName company.local -Server 192.168.10.10
نمونه خروجی و نحوه خواندن آن
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
file01.company.local A 120 Answer 192.168.10.20
| بخش خروجی | معنی آن |
|---|---|
Type A | پاسخ IPv4 است |
TTL | مدت Cache شدن Record را نشان میدهد |
Section Answer | این Record در پاسخ Query برگشته است |
IPAddress | آدرس Resolve شده است |
اگر این را دیدی یعنی چه؟
- DNS name does not existنام یا Record وجود ندارد یا Zone مورد Query آن را ندارد
- Query با -Server خاص جواب داد ولی بدون آن Fail شدDNS پیشفرض Client یا مسیر رسیدن به آن را بررسی کن
اگر DNS جواب صحیح میدهد ولی Application هنوز مشکل دارد، Cache، Proxy، Hosts File و خود Application را بررسی کن
نام File Server با IP کار میکند اما با نام نه. Resolve-DnsName به DNS داخلی NXDOMAIN میدهد؛ حالا مسئله از SMB جدا شده است
Test-NetConnection؛ Ping، Port و Route را در یک ابزار جمع کن
Test-NetConnection اطلاعات تشخیصی Connection میدهد و میتواند Ping، TCP Port و Route را بررسی کند. برای Support سرویسها بسیار کاربردی است
دستور
Test-NetConnection 192.168.10.1
Test-NetConnection file01 -Port 445
Test-NetConnection web01 -Port 443 -InformationLevel Detailed
نمونه خروجی و نحوه خواندن آن
ComputerName : file01
RemoteAddress : 192.168.10.20
RemotePort : 445
InterfaceAlias : Ethernet
SourceAddress : 192.168.10.25
TcpTestSucceeded : True
| بخش خروجی | معنی آن |
|---|---|
RemoteAddress | IPای که نام مقصد به آن Resolve شده |
RemotePort | Port TCP تستشده |
SourceAddress | IP محلیای که برای Connection انتخاب شده |
TcpTestSucceeded: True | TCP Handshake به Port مورد نظر موفق بوده است |
اگر این را دیدی یعنی چه؟
- PingSucceeded False ولی TcpTestSucceeded TrueICMP میتواند Block باشد ولی سرویس TCP قابل دسترس است
- TcpTestSucceeded FalsePort از دید Client قابل اتصال نیست؛ Service، Firewall، ACL و Route را بررسی کن
- RemoteAddress اشتباه بودDNS/Hosts/Name Resolution را بررسی کن
برای Troubleshooting سرویس همیشه Port واقعی سرویس را تست کن، نه اینکه فقط به Ping تکیه کنی
کاربر میگوید Share Server باز نمیشود. Test-NetConnection file01 -Port 445 مقدار False میدهد، پس قبل از NTFS Permission باید Connectivity/SMB Port را بررسی کنی
Get-NetTCPConnection؛ Connection و Listening Port را Objectمحور ببین
این Cmdlet مشابه هدف netstat برای TCP است ولی خروجی Object میدهد و Filter کردن State، Port و Process خیلی تمیزتر میشود
دستور
Get-NetTCPConnection
Get-NetTCPConnection -State Listen
Get-NetTCPConnection -LocalPort 443
نمونه خروجی و نحوه خواندن آن
LocalAddress LocalPort RemoteAddress RemotePort State OwningProcess
------------ --------- ------------- ---------- ----- -------------
0.0.0.0 443 0.0.0.0 0 Listen 4120
192.168.10.25 53122 203.0.113.20 443 Established 8652
| بخش خروجی | معنی آن |
|---|---|
Listen | یک Process منتظر TCP Connection است |
Established | TCP Session برقرار است |
OwningProcess | PID Process مالک Connection است |
اگر این را دیدی یعنی چه؟
- Port مورد نظر Listen نیستApplication یا Service، Bind Address و Startup Error را بررسی کن
- Listen هست ولی Remote Fail استWindows Firewall، Network Firewall، ACL و Route را بررسی کن
PID را به Get-Process بده تا Process مالک Port را پیدا کنی
وبسرویس باید روی 443 باشد ولی Clientها وصل نمیشوند. Local Get-NetTCPConnection نشان میدهد هیچ Listen روی 443 نیست، پس اول خود Service را بررسی میکنی
Get-NetAdapterStatistics؛ Error و Drop کارت شبکه را بررسی کن
برای قطعووصلی یا Performance غیرعادی، Statistics کارت شبکه میتواند سرنخهایی از Packetهای Received/Sent، Error یا Discard بدهد
دستور
Get-NetAdapterStatistics -Name 'Ethernet'
نمونه خروجی و نحوه خواندن آن
Name : Ethernet
ReceivedBytes : 984523102
ReceivedUnicastPackets : 735204
SentBytes : 410225993
SentUnicastPackets : 522190
| بخش خروجی | معنی آن |
|---|---|
ReceivedBytes/SentBytes | حجم داده عبوری از Adapter را نشان میدهند |
Packet Counterها | برای مقایسه روند Traffic مفیدند |
Error/Discard Propertyها | اگر Adapter/Driver آنها را گزارش کند میتوانند سرنخ خطای Link باشند |
اگر این را دیدی یعنی چه؟
- Counter Error سریع افزایش پیدا میکندکابل، Port، Driver، Duplex/Negotiation و Hardware را بررسی کن
- Traffic تقریباً صفر است ولی کاربر انتظار Traffic داردAdapter یا مسیر Application را بررسی کن
یک Snapshot Before بگیر، مشکل را بازتولید کن و دوباره Statistics را مقایسه کن
کاربر میگوید اتصال LAN هر چند دقیقه Freeze میشود. اختلاف Statistics قبل و بعد از Freeze میتواند برای Escalation سرنخ تولید کند
Set-DnsClientServerAddress؛ DNS را تغییر بده، اما بدان دقیقاً چه اثری دارد
این Cmdlet DNS Serverهای یک Interface را بهصورت Static تنظیم میکند. وقتی استفاده شود DNSهای DHCP برای همان Interface Override میشوند تا زمانی که تنظیم را Reset کنی
دستور
Set-DnsClientServerAddress -InterfaceAlias 'Ethernet' -ServerAddresses ('192.168.10.10','192.168.10.11')
# بازگشت به DNS دریافتی از DHCP
Set-DnsClientServerAddress -InterfaceAlias 'Ethernet' -ResetServerAddresses
نمونه خروجی و نحوه خواندن آن
# در حالت موفق معمولاً خروجی نمایشی ندارد
# برای بررسی:
Get-DnsClientServerAddress -InterfaceAlias 'Ethernet'
| بخش خروجی | معنی آن |
|---|---|
بدون Output | بسیاری از Set-* Cmdletها در حالت موفق Object چاپ نمیکنند |
-ServerAddresses | لیست DNS Static جدید است |
-ResetServerAddresses | تنظیم DNS را به حالت پیشفرض Interface برمیگرداند |
اگر این را دیدی یعنی چه؟
- بعد از Set اینترنت با IP هست ولی Domain خراب شدممکن است DNS نامناسب برای شبکه Domain تنظیم کرده باشی؛ سریعاً Design را بررسی و Rollback کن
- Remote Session داریقبل از تغییر شبکه مطمئن شو تغییر DNS باعث از دست رفتن مدیریت Remote نمیشود
همیشه بعد از Set، با Get-DnsClientServerAddress و Resolve-DnsName نتیجه را بررسی کن
Client باید از DNS داخلی شرکت استفاده کند، اما روی آن 8.8.8.8 بهصورت Static تنظیم شده است. بعد از ثبت DNSهای سازمان، Resolve-DnsName نامهای داخلی دوباره تست میشود
Restart-NetAdapter و Disable/Enable؛ ابزار سادهای که میتواند Remote Session را قطع کند
Restart کردن Adapter میتواند برای بعضی مشکلات Driver یا Link مفید باشد، اما روی سیستم Remote همان Interface ارتباط تو را قطع میکند
دستور
Restart-NetAdapter -Name 'Ethernet' -Confirm
# فقط با برنامه
Disable-NetAdapter -Name 'Ethernet' -Confirm
Enable-NetAdapter -Name 'Ethernet' -Confirm
نمونه خروجی و نحوه خواندن آن
Confirm
Are you sure you want to perform this action?
Performing the operation "Disable-NetAdapter" on target "Ethernet".
[Y] Yes [N] No [S] Suspend [?] Help
| بخش خروجی | معنی آن |
|---|---|
-Confirm | قبل از تغییر تأیید میگیرد |
Restart-NetAdapter | Adapter را Restart میکند و Connection موقتاً قطع میشود |
Disable-NetAdapter | Adapter را غیرفعال میکند و ممکن است تمام ارتباط شبکه همان سیستم قطع شود |
اگر این را دیدی یعنی چه؟
- روی همان Adapter Remote هستیDisable/Restart ممکن است Session را قطع کند و نتوانی Remote آن را برگردانی
- چند Adapter وجود داردنام Adapter و ifIndex را قبل از انجام کار دوباره بررسی کن
روی Remote System بدون Out-of-Band Access یا نفر Onsite با احتیاط بسیار زیاد عمل کن
روی لپتاپ کاربر حضوری هستی و Adapter پس از Sleep مشکل دارد. Restart-NetAdapter میتواند تست کنترلشدهای باشد، ولی همین کار روی Server Remote ریسک متفاوتی دارد
Get-Service؛ وضعیت سرویس را Objectمحور بررسی کن
برای DNS Client، Windows Time، Print Spooler یا سرویس Application ابتدا وضعیت را بخوان. PowerShell Filter و Propertyهای خوبی برای Service دارد
دستور
Get-Service -Name W32Time
Get-Service | Where-Object Status -eq 'Stopped' | Select-Object Name,DisplayName
نمونه خروجی و نحوه خواندن آن
Status Name DisplayName
------ ---- -----------
Running W32Time Windows Time
| بخش خروجی | معنی آن |
|---|---|
Status Running | Service در حال اجراست |
Status Stopped | Service اکنون اجرا نیست |
Name | Service Name فنی است |
DisplayName | نام نمایشی Service در GUI است |
اگر این را دیدی یعنی چه؟
- Service Running است ولی Function خراب استRunning بودن فقط State سرویس را ثابت میکند، نه سلامت کامل عملکرد آن
- Service مرتب Stop میشودEvent Log و Log Application را بررسی کن، نه اینکه فقط Start را تکرار کنی
برای تغییر Service اول Dependency و اثر عملیاتی را بررسی کن
Time Sync مشکل دارد ولی W32Time Running است. پس مشکل فقط Stop بودن سرویس نیست و باید Source/Sync Status را هم بررسی کنی
Get-Process؛ PID، CPU و Memory Process را بررسی کن
وقتی PID را از Get-NetTCPConnection داری یا Application کند است، Get-Process Process واقعی و مصرف منابع آن را نشان میدهد
دستور
Get-Process -Id 4120
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name,Id,CPU,WorkingSet
نمونه خروجی و نحوه خواندن آن
Handles NPM(K) PM(K) WS(K) CPU(s) Id ProcessName
------- ------ ----- ----- ------ -- -----------
1102 85 410220 520331 915.20 4120 appservice
| بخش خروجی | معنی آن |
|---|---|
Id | PID Process است |
CPU | CPU Time مصرفشده Process است، نه لزوماً درصد لحظهای CPU |
WorkingSet | حافظه Working Set Process است |
اگر این را دیدی یعنی چه؟
- PID پیدا نشدProcess ممکن است بسته شده باشد یا PID تغییر کرده باشد
- Process منابع بالا داردقبل از Kill، رفتار Application و User Impact را بررسی کن
برای Problem Process ابتدا Log و Service/Application Context را پیدا کن و بعد درباره Restart تصمیم بگیر
Port 443 توسط PID 4120 Listen است. Get-Process -Id 4120 نشان میدهد Process مربوط به appservice است و عیبیابی روی همان Application متمرکز میشود
Get-WinEvent؛ از Event Log بهجای حدس استفاده کن
خیلی از مشکلات Service، Driver، Logon و Windows در Event Log سرنخ دارند. Get-WinEvent امکان Filter دقیق و Export نتیجه را میدهد
دستور
Get-WinEvent -LogName System -MaxEvents 20
Get-WinEvent -FilterHashtable @{LogName='System'; Level=2} -MaxEvents 20
نمونه خروجی و نحوه خواندن آن
ProviderName: Service Control Manager
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
8/17/2026 20:15:42 7031 Error The ... service terminated unexpectedly
| بخش خروجی | معنی آن |
|---|---|
TimeCreated | زمان Event است و باید با زمان گزارش کاربر مقایسه شود |
Id | Event ID است که همراه Provider معنی پیدا میکند |
ProviderName | کامپوننتی است که Event را ثبت کرده |
LevelDisplayName | Error/Warning/Information بودن Event است |
اگر این را دیدی یعنی چه؟
- صدها Error قدیمی دیدیفقط Error بودن کافی نیست؛ بازه زمانی و ارتباط با Incident را در نظر بگیر
- Event دقیقاً همزمان با مشکل تکرار میشودProvider، Event ID و Message را برای Root Cause بیشتر بررسی کن
زمان Incident را از کاربر بگیر و Filter زمانی بساز تا Noise کم شود
Application هر روز ساعت مشخصی قطع میشود. Get-WinEvent نشان میدهد Service همان دقیقه Terminate شده و Event ID مرتبط ثبت شده است
Get-CimInstance؛ اطلاعات سیستم را Structured بگیر
CIM برای گرفتن اطلاعات OS، Computer، BIOS و بسیاری از کلاسهای مدیریتی Windows مناسب است و خروجی قابل Filter/Export دارد
دستور
Get-CimInstance Win32_OperatingSystem | Select-Object Caption,Version,LastBootUpTime
Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer,Model,TotalPhysicalMemory
نمونه خروجی و نحوه خواندن آن
Caption Version LastBootUpTime
------- ------- --------------
Microsoft Windows 11 Pro 10.0.26100 8/16/2026 8:12:41 AM
| بخش خروجی | معنی آن |
|---|---|
Caption | Edition/نام سیستمعامل |
Version | Version/Build خانواده OS |
LastBootUpTime | زمان Boot سیستم |
اگر این را دیدی یعنی چه؟
- User میگوید Restart کرده ولی Boot Time قدیمی استنوع Shutdown/Fast Startup یا ادعای Restart را دوباره بررسی کن
- مدل/سختافزار با Asset List فرق داردAsset Documentation را اصلاح یا سیستم صحیح را بررسی کن
خروجی CIM را برای Inventory در CSV ذخیره کن
قبل از Remote Troubleshooting میخواهی نسخه Windows، مدل دستگاه و آخرین Boot را بدون چند پنجره GUI جمعآوری کنی
Get-LocalUser و Get-LocalGroupMember؛ حساب Local را از Domain Account جدا کن
برای بررسی Local Administratorها و Local Accountها این Cmdletها خروجی واضحتری از روشهای متنی میدهند
دستور
Get-LocalUser
Get-LocalGroupMember -Group 'Administrators'
نمونه خروجی و نحوه خواندن آن
ObjectClass Name PrincipalSource
----------- ---- ---------------
User PC01\LocalAdmin Local
User COMPANY\ITSupport ActiveDirectory
| بخش خروجی | معنی آن |
|---|---|
PrincipalSource Local | حساب از خود سیستم Local آمده |
PrincipalSource ActiveDirectory | Principal از Domain آمده |
Administrators | عضویت این Group دسترسی Local Admin میدهد |
اگر این را دیدی یعنی چه؟
- User ناشناخته در Administrators بودقبل از حذف، مالکیت/کاربرد حساب و سیاست سازمان را بررسی کن
- Domain Group مورد انتظار نبودGPO، Local Group Policy یا Deployment روش دسترسی را بررسی کن
هر تغییر Membership را مستند کن و کمترین سطح دسترسی لازم را رعایت کن
کاربر میگوید قبلاً Local Admin بوده. Get-LocalGroupMember نشان میدهد Group مربوطه دیگر عضو Administrators نیست و حالا باید علت تغییر را بررسی کنی
New-PSDrive؛ Shared Folder را Map کن و خطا را درست تفسیر کن
PowerShell میتواند Network Drive بسازد و برای Automation/Support خروجی قابل کنترلتری بدهد
دستور
New-PSDrive -Name Z -PSProvider FileSystem -Root '\\FILE01\Public' -Persist
Get-PSDrive -Name Z
نمونه خروجی و نحوه خواندن آن
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Z FileSystem \\FILE01\Public
| بخش خروجی | معنی آن |
|---|---|
-Persist | Mapping را در Windows ماندگار میکند |
PSProvider FileSystem | Drive از نوع File System است |
Root | مسیر UNC مقصد است |
اگر این را دیدی یعنی چه؟
- Path not foundDNS، نام Share، SMB و Connectivity را بررسی کن
- Access deniedAuthentication و Share/NTFS Permission را بررسی کن
قبل از Mapping جدید، مسیر UNC و Mappingهای قبلی را بررسی کن
Z: به Server قدیمی اشاره میکند. ابتدا Mapping موجود را شناسایی و سپس طبق Change مورد نظر مسیر صحیح را Map میکنی
Execution Policy؛ خطای «running scripts is disabled» را درست بفهم
Execution Policy شرایط اجرای Script را کنترل میکند و یک Safety Feature است، نه مرز امنیتی کامل. دستورهای Interactive حتی در Restricted قابل اجرا هستند ولی Script ممکن است Block شود
دستور
Get-ExecutionPolicy
Get-ExecutionPolicy -List
نمونه خروجی و نحوه خواندن آن
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Restricted
| بخش خروجی | معنی آن |
|---|---|
Restricted | اجرای Scriptهای PowerShell در آن Scope محدود است |
Undefined | در آن Scope Policy صریح تعریف نشده |
MachinePolicy/UserPolicy | میتوانند توسط Group Policy مدیریت شوند |
اگر این را دیدی یعنی چه؟
- running scripts is disabled on this systemاول Scope و Policy را بخوان؛ کورکورانه Policy را Bypass نکن
- Policy توسط GPO آمدهتنظیم Local ممکن است مؤثر نباشد و باید Policy سازمان را رعایت کنی
قبل از تغییر Execution Policy دلیل، Scope و سیاست امنیتی سازمان را مشخص کن
یک Script داخلی اجرا نمیشود اما Cmdletهای دستی کار میکنند. Error دقیق میگوید Script Execution Block است و Get-ExecutionPolicy -List منبع Policy را روشن میکند
Export-Csv و Out-File؛ نتیجه عیبیابی را قابل استفاده تحویل بده
پشتیبانی حرفهای یعنی خروجی Before/After و اطلاعات لازم برای Escalation را ثبت کنی. PowerShell برای Export Structured Data عالی است
دستور
Get-NetAdapter | Select-Object Name,Status,LinkSpeed,MacAddress | Export-Csv .\net-adapters.csv -NoTypeInformation
Get-NetIPConfiguration | Out-File .\ipconfig.txt
نمونه خروجی و نحوه خواندن آن
# net-adapters.csv
"Name","Status","LinkSpeed","MacAddress"
"Ethernet","Up","1 Gbps","4C-52-62-11-22-33"
"Wi-Fi","Up","866 Mbps","80-11-22-AA-BB-CC"
| بخش خروجی | معنی آن |
|---|---|
Export-Csv | Propertyهای Object را به CSV قابل پردازش تبدیل میکند |
-NoTypeInformation | Header نوع قدیمی PowerShell را از CSV حذف میکند |
Out-File | نمای متنی Output را داخل فایل مینویسد |
اگر این را دیدی یعنی چه؟
- CSV ستونهای عجیب داشتقبل از Export با Select-Object Propertyهای لازم را مشخص کن
- اطلاعات حساس داخل خروجی استقبل از ارسال Ticket یا فایل برای شخص دیگر Data را بررسی کن
برای Inventory از CSV و برای Log متنی از Out-File/Transcript استفاده کن
باید وضعیت Adapterهای چند سیستم را برای همکار سطح ۲ ارسال کنی. CSV استاندارد سریعتر قابل مقایسه است
Start-Transcript؛ Session عیبیابی را ثبت کن
Transcript دستورها و بسیاری از Outputهای Session را داخل فایل ثبت میکند و برای مستندسازی Incident مفید است
دستور
Start-Transcript -Path "$env:USERPROFILE\Desktop\support-session.txt"
# دستورات عیبیابی
Stop-Transcript
نمونه خروجی و نحوه خواندن آن
Transcript started, output file is C:\Users\User\Desktop\support-session.txt
...
Transcript stopped, output file is C:\Users\User\Desktop\support-session.txt
| بخش خروجی | معنی آن |
|---|---|
Transcript started | ثبت Session شروع شده است |
Transcript stopped | فایل ثبت Session بسته شده است |
$env:USERPROFILE | مسیر Profile کاربر فعلی است |
اگر این را دیدی یعنی چه؟
- قرار است Credential یا اطلاعات حساس وارد شودTranscript را با آگاهی از Data Handling سازمان استفاده کن
- فایل برای Ticket ارسال میشودقبل از ارسال محتوای حساس را بررسی کن
Transcript را ابزار Documentation بدان، نه اینکه بیدلیل تمام Sessionهای مدیریتی را ذخیره کنی
یک خطای پیچیده باید به Level 2 Escalate شود. Transcript باعث میشود ترتیب Commandها و Errorها دقیق قابل بازبینی باشد
Test-ComputerSecureChannel؛ Trust بین Client و Domain را بررسی کن
این Cmdlet Secure Channel بین Computer و Domain را تست میکند. برای خطاهای Trust Relationship یک تست مستقیم و مفید است
دستور
Test-ComputerSecureChannel
Test-ComputerSecureChannel -Verbose
نمونه خروجی و نحوه خواندن آن
True
| بخش خروجی | معنی آن |
|---|---|
True | Secure Channel در تست فعلی سالم گزارش شده است |
False | Trust/Secure Channel مشکل دارد یا تست نتوانسته آن را سالم تأیید کند |
-Verbose | جزئیات بیشتری از عملیات نمایش میدهد |
اگر این را دیدی یعنی چه؟
- False بودDNS، دسترسی به Domain Controller، Computer Account و وضعیت Domain را قبل از Repair بررسی کن
- سیستم Workgroup استاین Cmdlet برای همان سناریوی Domain Member معنی دارد
Repair را خودکار و بدون تشخیص اجرا نکن. اول علت DNS/Connectivity/Account را مشخص کن
Windows پیام Trust Relationship میدهد. DNS Client صحیح است، DC قابل دسترس است و Test-ComputerSecureChannel=False گزارش میکند؛ حالا Secure Channel یک محور واقعی عیبیابی است
Error Record؛ خط قرمز PowerShell را کامل بخوان
PowerShell Error فقط یک جمله نیست. CategoryInfo و FullyQualifiedErrorId میتوانند نوع و منبع خطا را مشخصتر کنند
دستور
Get-Service -Name NotAService
$Error[0] | Format-List *
نمونه خروجی و نحوه خواندن آن
Get-Service : Cannot find any service with service name 'NotAService'.
CategoryInfo : ObjectNotFound: (NotAService:String) [Get-Service], ServiceCommandException
FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
| بخش خروجی | معنی آن |
|---|---|
ObjectNotFound | نوع کلی خطا نشان میدهد Object مورد نظر پیدا نشده |
FullyQualifiedErrorId | شناسه دقیقتر خطا برای مستندات و جستجوی فنی است |
$Error[0] | آخرین Error ثبتشده Session را میدهد |
اگر این را دیدی یعنی چه؟
- AccessDenied دیدیقبل از Run as administrator بفهم عملیات چرا Privilege میخواهد
- CommandNotFound دیدیSpelling، Module و Version را بررسی کن
- ParameterBindingException دیدیSyntax، نوع Value و نام Parameter را بررسی کن
متن Error را پاک نکن و دوباره کورکورانه فرمان نزن. Error خودش بخشی از داده عیبیابی است
Cmdlet روی یک Server CommandNotFound میدهد. بهجای تغییر Permission، اول میفهمی Module یا Version لازم روی Server موجود نیست
فقط یک Client اینترنت ندارد
Get-NetAdapter→ آیا Adapter درست Up است؟Get-NetIPConfiguration→ IP، Gateway و DNS منطقی است؟Test-NetConnection gateway→ مسیر LocalTest-NetConnection 8.8.8.8→ مسیر IP بیرونیResolve-DnsName example.com→ DNS- هرجا Chain میشکند همان محدوده را عمیقتر بررسی کن
Application روی Port مشخص جواب نمیدهد
Test-NetConnection server -Port 443از Client- روی Server:
Get-NetTCPConnection -LocalPort 443 - PID را از OwningProcess بردار
Get-Process -Id PID- اگر Listen نیست Service/Application را بررسی کن
- اگر Listen هست ولی Remote Fail است Firewall/ACL/Route را بررسی کن
Client عضو Domain است ولی Trust یا GPO مشکل دارد
Get-NetIPConfigurationو DNS داخلیResolve-DnsNameبرای DC/DomainTest-NetConnectionبرای Connectivity لازمTest-ComputerSecureChannel- Event Log مرتبط با زمان Incident را با
Get-WinEventبررسی کن
Shared Folder باز نمیشود
Resolve-DnsName FILE01Test-NetConnection FILE01 -Port 445- اگر Port 445 سالم است مسیر UNC را بررسی کن
- Mapping را با
Get-PSDriveیا ابزار Mapping بررسی کن - Access Denied را از Path/Network Error جدا کن
شبکه قطع و وصل میشود
Get-NetAdapterStatisticsBefore- مشکل را بازتولید کن
- Statistics را دوباره بگیر
Test-NetConnection -InformationLevel Detailedبرای مسیر- زمان Incident را با System Eventها مقایسه کن
Escalation حرفهای با داده قابل استفاده
- Adapter، IP و DNS را Select کن
- Eventهای مرتبط همان بازه را جمع کن
- خروجیها را Export-Csv/Out-File کن
- در صورت نیاز Transcript Session را نگه دار
- در Ticket بنویس چه چیزی تست شد، نتیجه چه بود و کجا Failure دیده شد
برای هر سؤال کدام Cmdlet را اول بزنم؟
| سؤال | Cmdlet | دنبال چه چیزی هستی؟ |
|---|---|---|
| کارت شبکه سالم است؟ | Get-NetAdapter | Status، LinkSpeed، ifIndex |
| IP/Gateway/DNS چیست؟ | Get-NetIPConfiguration | Configuration همان Interface |
| IP از DHCP است یا Manual؟ | Get-NetIPAddress | PrefixOrigin و PrefixLength |
| Default Route چیست؟ | Get-NetRoute | NextHop و Metric |
| DNS چه جوابی میدهد؟ | Resolve-DnsName | Record، IP، Error |
| Port TCP باز است؟ | Test-NetConnection -Port | TcpTestSucceeded |
| چه Processی Port را گرفته؟ | Get-NetTCPConnection | OwningProcess |
| Service Running است؟ | Get-Service | Status |
| Event مرتبط چیست؟ | Get-WinEvent | Time، ID، Provider، Message |
| Trust Domain سالم است؟ | Test-ComputerSecureChannel | True/False |
بعد از این پک باید این مهارتها را داشته باشی
- فرق Windows PowerShell 5.1 و PowerShell 7 را در حد Support میفهمی
- Get-Help و Get-Command را بهجای حفظ کردن همه Cmdletها استفاده میکنی
- Object، Property و Pipeline را میفهمی
- خروجی را با Select، Where و Sort کنترل میکنی
- Adapter، IP، Gateway، DNS و Route را با Cmdletهای شبکه تحلیل میکنی
- Test-NetConnection را برای Port واقعی سرویس استفاده میکنی
- PID را از Connection به Process وصل میکنی
- Service و Event Log را با داده Structured بررسی میکنی
- Secure Channel Domain را تست میکنی
- قبل از Set-* یا Disable-* اثر تغییر و Rollback را در نظر میگیری
- Output را برای Ticket و Escalation به CSV/Text تبدیل میکنی
- Error Record را میخوانی و از روی Error قدم بعدی انتخاب میکنی