כח הכריכה ב- PowerShell: מבחן הפינג המודרני

הַcmdlet שֶׁל הַיּוֹם הוּא PowerShell Test-Connection. Test-Connection הוּא cmdlet שֶׁבּוֹ מְבָצֵעַ בְּבֵירוּת וְבֵירוּת בַּרְשָׁת שֶׁלָּךְ. חשבוּ עַל Test-Connection כְּמִימוּשׁ PowerShell שֶׁל הַיּוֹתֵר פוֹפוּלָרִי ping utility. אַף עַל פִּי שֶׁשְׁנֵיהֶם יֵשׁ לָהֶם 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 וּבְמַרְאֶה חִיצוֹנִי, זֶה נִכוֹן אֲךָ PowerShell test-connection מְעַנֵה לַבַּקָּשָׁה ICMP מְעַט אַחֵרת. לְהַבְדִּיל מִ ping.exe, Test-Connection מַשְׁתִּמֵשׁ בְּמִחְלָקַת WMI שֶׁל הַמְחִשָׁב הַמְקוֹמִי Win32_PingStatus כְּדֵי לִשְׁלֹוחַ אֶת הַבַּקָּשָׁה ICMP. בְּשִׁימוּשׁ הָאֶחְסוּן הַמְקוֹמִי שֶׁל WMI אַתָּה צָרִיךְ לְוַדֵא כִּי הָאֶחְסוּן הַמְקוֹמִי שֶׁלְךָ הוּא בְּרִיא אַחֶרֶת Test-Connection לֹא תַעֲבֹוד.

פּוֹטֵר שֶׁל הַפְּלָט שֶׁל PowerShell Test-Connection

גַּם, כְּמוֹ שֶׁעִם הַיָּפְיָה שֶׁל PowerShell, הַcmdlet הַזֶּה לֹא פָּשׁוּט מְחָזֵר מַה שֶׁנִּרְאֶה מִיָּד בַּקוֹנְסוֹל. אֲנַחְנוּ רוֹאִים אוֹבְיֶקְטִים עָשִׁירִים שֶׁנִּיתַן לְקַבֵּץ עוֹד מֵידָע מִמֶּנּוּ.

אִם אֲנִי מְקַצֶּה אֶת הַפְּלָט לְמִשְׁתַּנֶּה וְאָז בוֹדֵק אֶת הַמַּאפיִכִים, אַתָּה רוֹאֶה שֶׁאֲנִי אָסַפְתִּי הַרְבֵּה מֵידָע נוֹסָף.

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 כדי לאמת למארחים רחוקים. כברירת מחדל, זה ישתמש ב-אימות DCOM ברמת חבילה אבל סוג האימות יכול להשתנות בכל עת עם הפרמטר DcomAuthentication.

שימוש בעבודות רקע

פקודת זו יכולה גם לרוץ כעבודת רקע. עבודות רקע מתאימות אם יש לך הרבה מחשבים רחוקים לאשף ובמקום לחכות לנצח עבור אלה שיפגו בסופו של דבר, פשוט שלח אותו לעבודה רקע.

לפי עזרת הפקודה של PowerShell עבור Powershell test-connections, זה אומר ש-פקודות רחוקות של PowerShell חייבות להיות מופעלות על המחשבים המקומיים והרחוקים, אך זה אינו נכון. כפי שניתן לראות למטה, אני בודק את google.com, והפקודה עובדת מצוין.

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

שמירה על זה פשוט

לבסוף, אם אתה רק מחפש תשובת כן/לא בינארית לכך האם מחשב מגיב או לא, תמיד תוכל להשתמש בפרמטר Quiet. מחרוזת נפוצה שאני תמיד משתמש בה לראות במהירות אם שרת פעיל או לא היא להשתמש ב-Quiet וב-Count של 1 כדי לכפות על Test-Connection לשלוח בקשת ICMP יחידה.

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

זהו ל-cmdlet שלנו ליום! כיסינו את רוב מה שאפשרי עם test-connection ב-Powershell אבל, כתמיד, כדאי לבדוק את תוכן העזרה של PowerShell או לעבור אל מסמך התיעוד של Microsoft עבור פירוט מלא.

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