اختبار الاتصال PowerShell: اختبار البينغ الحديث

الأمر النهاري لليوم هو “PowerShell Test-Connection”. Test-Connection هو أمر يختبر اتصالك بالشبكة، كما يوحي اسمه. اعتبر Test-Connection تنفيذاً لأداة ping المعروفة في PowerShell. على الرغم من وجود بروتوكول ICMP مشترك بينهما، ستلاحظ أن الطريقتين مختلفتين قليلاً.

استخدام هذا الأمر بسيط. في أبسط حالاته، قم بتحديد معلمة ComputerName وسيُرسل أربع طلبات ICMP إلى المضيف المعني.

PS> Test-Connection -ComputerName google.com
Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms)
------        -----------     -----------      -----------                              -----    --------
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       47
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       90
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       88
MACWINVM      google.com      172.217.0.14     2607:f8b0:4009:80c::200e                 32       205

تبدو هذه النتيجة مشابهة لنتيجة ping.exe وعلى السطح، هي كذلك، ولكن اختلاف طريقة إصدار طلب ICMP في Powershell test-connection. على عكس ping.exe، فإن Test-Connection يستخدم فئة WMI Win32_PingStatus على جهاز الكمبيوتر المحلي لإرسال طلب ICMP. باستخدام مستودع WMI المحلي يجب التأكد من سلامته وإلا فلن يعمل Test-Connection.

مخرجات أمر PowerShell Test-Connection

وبالإضافة إلى ذلك، كما هو الحال مع جمال PowerShell، هذا الأمر لا يقتصر على إظهار ما يظهر في الواجهة فقط. نرى أنواع كائنات غنية يمكننا الحصول على معلومات إضافية منها.

إذا قمت بتعيين الناتج إلى متغير ثم فحصت الخصائص، يمكنك أن ترى أنني حصلت على معلومات أكثر فائدة.

PS> $pingResults | Get-Member
TypeName: System.Management.ManagementObject#root\cimv2\Win32_PingStatus
Name                           MemberType     Definition
----                           ----------     ----------
PSComputerName                 AliasProperty  PSComputerName = __SERVER
Address                        Property       string Address {get;set;}
BufferSize                     Property       uint32 BufferSize {get;set;}
NoFragmentation                Property       bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property       uint32
PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress                Property       string ProtocolAddress {get;set;}
ProtocolAddressResolved        Property       string
ProtocolAddressResolved {get;set;}
RecordRoute                    Property       uint32 RecordRoute {get;set;}
ReplyInconsistency             Property       bool ReplyInconsistency {get;set;}
ReplySize                      Property       uint32 ReplySize {get;set;}
ResolveAddressNames            Property       bool ResolveAddressNames {get;set;}
ResponseTime                   Property       uint32 ResponseTime {get;set;}
ResponseTimeToLive             Property       uint32 ResponseTimeToLive {get;set;}
RouteRecord                    Property       string[] RouteRecord {get;set;}
RouteRecordResolved            Property       string[] RouteRecordResolved {get;set;}
SourceRoute                    Property       string SourceRoute {get;set;}
SourceRouteType                Property       uint32 SourceRouteType {get;set;}
StatusCode                     Property       uint32 StatusCode {get;set;}
Timeout                        Property       uint32 Timeout {get;set;}
TimeStampRecord                Property       uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress         Property       string[] TimeStampRecordAddress {get;set;} TimeStampRecordAddressResolved Property       string[]
TimeStampRecordAddressResolved {get;set;}
TimestampRoute                 Property       uint32 TimestampRoute {get;set;}
<SNIP>

إذا كنت تختبر المضيفين الداخليين، ستستخدم Test-Connection DCOM للمصادقة على المضيفين البعيدين افتراضيًا، ولكن يمكن دائمًا تغيير نوع المصادقة باستخدام معلمة DcomAuthentication.

استخدام الوظائف الخلفية

يمكن لهذا الأمر أيضًا أن يعمل كوظيفة خلفية. تأتي الوظائف الخلفية بمساعدة إذا كان لديك الكثير من الكمبيوترات البعيدة لعمل عملية بنج عليها، بدلاً من الانتظار إلى الأبد للكمبيوترات التي ستنتهي في النهاية بالتوقف عن الرد، ما عليك سوى إرسالها إلى وظيفة خلفية.

وفقًا لمساعدة PowerShell لـ Powershell test-connections، يقول أنه يجب تمكين التحكم عن بعد في PowerShell على كل من الكمبيوترين المحلي والبعيد، ولكن هذا غير صحيح. كما يمكنك رؤية أدناه، أقوم بفحص google.com، والأمر ما زال يعمل بشكل جيد.

Test-Connection -AsJob -ComputerName google.com
Get-Job | Receive-Job

الحفاظ على الأمور بسيطة

أخيرًا، إذا كنت تبحث فقط عن إجابة نعم / لا ثنائية على ما إذا كان الكمبيوتر يستجيب أم لا، يمكنك دائمًا استخدام معلمة Quiet. السلسلة الشائعة التي أستخدمها دائمًا لرؤية بسرعة ما إذا كان الخادم متصلًا أم لا هي استخدام Quiet و Count بقيمة 1 لإرسال طلب ICMP واحد فقط باستخدام Test-Connection.

PS> Test-Connection -ComputerName google.com -Quiet -Count 1
True

هذا كل شيء ليومنا في أداة cmdlet! لقد غطينا معظم ما هو ممكن مع اختبار الاتصال بـ Powershell ولكن، كالعادة، تحقق من محتوى مساعدة Powershell أو انتقل إلى وثائق Microsoft للحصول على فهم كامل.

Source:
https://adamtheautomator.com/powershell-test-connection/