PowerShell Hashtable Ultimate Guide עם דוגמאות

20 במאי 2021 5546 צפיות PowerShell Hashtable המדריך האולטימטיבי שלך עם דוגמאות

PowerShell hashtable הוא אוסף פריטים והערכים שלהם. הפריטים מכונים מפתחות. יתרה מכך, לכל מפתח ב-hashtable יש ערך שווה ערך.





במהותו, טבלת Hasht של PowerShell היא 'טבלה' של חנות מפתח/ערך.



ב-S Zone זה, אלמד אותך כל מה שאתה צריך לדעת על טבלאות hashtables של PowerShell. החלק הראשון בוחן את ההבדל בין Hashtable למערך.

לאחר מכן, בסעיף השני, באמצעות ה- קבל-חבר Cmdlet, אני אקח אותך אל מאחורי מכסה המנוע של הטבלאות.



לבסוף, אבדוק דרכים שונות להשתמש ב-hashtables ב-scripting.



עיין בנושאי פוסטים

PowerShell Hashtable לעומת PowerShell Array

PowerShell Hashtable לעומת PowerShell Array

לפני שאני צולל לתוך Hashtables, אני רוצה להסביר את ההבדל בין Hashtables ל-Arrays. בידול זה חשוב מכיוון ששני המושגים יכולים בקלות להתבלבל.



בהקדמה למדריך זה הסברתי ש-hashtable הוא חנות מפתח/ערך. בנוסף, טבלת hashable היא כמו טבלה עם מפתחות וערכים.



להיפך, מערך PowerShell הוא אוסף של ערכים או אובייקטים.

ההבדל העיקרי בין PowerShell hashtable למערך PowerShell הוא ש-hashtable הוא אוסף של פריטים (מפתחות) והערכים שלהם - בעוד שמערך הוא רק רשימה של פריטים.

לדוגמא מהירה, הקודים שלהלן הם דוגמאות ל-hashtables ומערך - הקוד הראשון יוצר hashtables ואילו הקוד השני יוצר מערך:

|_+_| |_+_| מדוגמאות הקוד, אתה יכול לראות שבעוד ש-hashtable מוקף ב-{}, מערך מוקף ב-().

צילום המסך למטה מציג את התוצאות של שני הקודים.

PowerShell Hashtable לעומת PowerShell Array

החלק של צילום המסך שכותרתו (1) הוא תוצאה של ה-hashtable. ראית את צמד המפתח/ערך?

בדוגמה שלמעלה, למפתח, ל-Root יש ערך של C:UsersvictoDocuments. כמו כן, למפתח PSProvider יש ערך שנקרא FileSystem.

לבסוף, לשם יש ערך של Document.

יתר על כן, לחלק של צילום המסך שכותרתו (2) יש את התוצאה של קוד המערך. כפי שהוסבר קודם, זו רק רשימה.

שיטות ומאפיינים של PowerShell Hashtable

שיטות ומאפיינים של PowerShell Hashtable

בהקדמה הבטחתי לקחת אתכם אל מאחורי מכסה המנוע של PowerShell Hashtables. זהו זה!

בחלק זה, אלמד אותך כיצד להשתמש ב-Get-Member Cmdlet כדי להסתכל מאחורי טבלאות hashtable.

כאשר אתה מעביר את התוצאה של PowerShell Hashtable אל קבל-חבר , תוכל לסקור את הזמין שיטות ו נכסים של ה-Hashtable.

הבה נחזור לדוגמא המהירה הראשונה שלנו לעיל:

|_+_|

העתק את הקוד למסמך PowerShell ISE חדש. לאחר מכן, הפעל את הקוד.

לאחר מכן, כדי לראות זמין שיטות ו נכסים ב-hashtable זה, הפעל את הפקודה הזו על אותו PowerShell ISE.

|_+_|

כדי להפעיל את הפקודה לעיל, הדבק אותה מתחת לקוד האחרון. לאחר מכן, סמן אותו והקש F8 או לחץ על הסמל המודגש.

שיטות ומאפיינים של PowerShell Hashtable

הפקודה תציג תוצאות בחלונית המסוף של PowerShell.

לעת עתה, תסתכל על התוצאה. יש לו שם סוג: System.Collections.Hashtable.

זה מאשר שהאובייקטים שהוכנסו ל-Get-Member Cmdlet הם Hashtable!

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

כיצד להוסיף או להסיר פריטים ל-Hashtable קיים

בחלק זה, תלמד להוסיף פריטים חדשים ל-Hashtable קיים של PowerShell. יתר על כן, תלמדו גם כיצד להסיר פריט מ-Hashtable קיים של PowerShell.

לפני שאני צולל לתוכו, אני רוצה להזכיר שאתה יכול גם ליצור hashtable ריק. לאחר מכן, הוסף מפתחות/ערכים ל-Hashtable - עוד על כך בהמשך.

חזרה להוספה או הסרה של פריטים ל-Hastables קיימים של PowerShell - כאשר הרצנו את $hashtable | קבל-חבר הפקודה, אחת השיטות המוצגות בתוצאה היא לְהוֹסִיף . יש גם שיטה, לְהַסִיר .

ראה את החלקים המודגשים של צילום המסך למטה:

שיטות ומאפיינים של PowerShell Hashtable

לפני שאראה לכם כיצד להשתמש בשתי השיטות הללו, בואו נסתכל על קוד ה-Hashtable המקורי של PowerShell:

|_+_|

ל-Hashtable יש 3 ערכים. בדוגמה זו, אוסיף מפתח נוסף בשם Description עם הערך Maps לתיקיית 'המסמכים שלי' שלי.

כדי להשלים משימה זו, אני אריץ את הפקודה למטה (באותה מסוף PowerShell ISE שהרצתי את הפקודות הקודמות)

|_+_| שימו לב איך השתמשתי ב-Add שיטה . אני מוסיף נקודה (.) ליד המשתנה שמחזיק את ה-hashtable. ואז, כללתי את השיטה, לְהוֹסִיף , בא אחריו (). לבסוף, כללתי את צמד המפתח/ערך החדש שברצוני להוסיף ל-Hashtable.

לאחר הפעלת הפקודה, כדי לאשר שהמפתח הנוסף נוסף, סמן $hashtable והקש F8.

|_+_|

הנה צילום מסך של התוצאה - המאשר שהמפתח/הערך החדש נוסף.

בהמשך, אתה יכול להשתמש באותה גישה כדי להסיר ערך מ-Hashtable של PowerShell.

כדי להסיר את המפתח האחרון שהוספנו ל-hashtable, הפעל פקודה דומה לפקודה האחרונה. אבל הפעם להחליף את לְהוֹסִיף שיטה עם ה לְהַסִיר שיטה.

הנה הפקודה:

|_+_| ה לְהַסִיר השיטה כוללת רק את מַפְתֵחַ . אין צורך לכלול את המפתח ערך בפקודה.

ראשית, הפעל את הפקודה לעיל. לאחר מכן, כדי לאשר שהמפתח הוסר, סמן $hashtable והקש F8.

|_+_|

תוצאת הפקודה מאשרת שהמפתח הוסר!

שיטות ומאפיינים של PowerShell Hashtable - כיצד להוסיף או להסיר פריטים ל-Hashtable קיים

כיצד לבדוק אם PowerShell Hashtable מכיל מפתח

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

|_+_|

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

יישום נוסף של מכיל מפתח השיטה של ​​PowerShell hashtable היא פשוט להשתמש בו כדי לבדוק אם קיים שם מפתח ב-hashtable.

טמפ 'מעבד סרק רגיל

כדי לבדוק אם קיים מפתח ב-Hashtable PowerShell באמצעות ה- מכיל מפתח שיטה, הפעל את הפקודה למטה:

|_+_|

פקודה זו בודקת אם מפתח עם השם Description קיים ב-hashtable שנשמר במשתנה $hashtable. התוצאה של הפקודה מציגה False.

שיטות ומאפיינים של PowerShell Hashtable - כיצד לבדוק אם PowerShell Hashtable מכיל מפתח

כדי לבדוק אם מפתח התיאור קיים לפני הוספתו ל-Hashtable של PowerShell, נצטרך שורת קודים נוספת לפקודה הקודמת.

הנה הקוד המשופר.

|_+_|

הקוד משתמש במשפט התנאי IF כדי לבדוק אם מפתח עם השם Description קיים בטבלת ה-hasht.

לאחר מכן, אם התוצאה היא False, בחלק של ביצוע הפקודה של הצהרת IF, אנו משתמשים ב- לְהוֹסִיף שיטת ה-Hashtable של PowerShell להוספת המפתח ל-Hashtable.

עם זאת, אם המפתח קיים ב-hashtable, בחלק Else של הצהרת IF, אנו מציגים הודעה המודיעה לאדם שהריץ את הפקודה שהמפתח כבר קיים.

לאחר הפעלת הפקודה האחרונה, סמן את ה $hashtable משתנה ולהפעיל אותו לבד. התוצאה מאשרת שהמפתח, Description נוסף למשתנה מכיוון שהוא לא היה קיים.

כדי לבדוק אם הסקריפט הזה עובד - הפעל אותו שוב...

|_+_|

הפעם, התסריט לא הוסיף את המפתח. במקום זאת, הוא החזיר את המידע בחלק אחר של הצהרת ה-IF - המפתח כבר קיים ב-Hashtable .

שיטות ומאפיינים של PowerShell Hashtable - כיצד לבדוק אם PowerShell Hashtable מכיל מפתח

כיצד להמיר PowerShell Hashtable למחרוזת

הצעד הראשון להמרת PowerShell Hashtable למחרוזת הוא החזרת ערכי המפתחות ב-Hashtable. במילים אחרות, אתה ממיר את ה-Hashtable של PowerShell למערך PowerShell.

כדי להחזיר את הערכים ב-hashtable, התקשר ל- ערכים נכס ה-hashtable.

הנה הפקודה שמחזירה את הערכים ב-hashtable:

|_+_|

לאחר שהחזרת את הערכים ב-hashtable של PowerShell, השלב הבא הוא להעביר את $hashtable.Values ​​ל- Out-String פקודה…

|_+_| בהמשך מדריך זה, תעריך את החשיבות של המרת PowerShell hashable למחרוזת. כדי לראות את היישום המעשי של זה בסקריפט של SysAdmin בעולם האמיתי, המשך לקרוא.

כיצד להשתמש ב- PowerShell Hashtable GetEnumerator שיטה

שיטה חשובה נוספת של PowerShell hashtable היא GetEnumerator שיטה.

אתה יכול להשתמש בשיטה זו כדי להפריד את המפתחות ב-hashtable למחרוזות בודדות. להלן פקודה לדוגמה של GetEnumerator שיטה של ​​טבל hashable:

|_+_|

כפי שניתן לראות מהתוצאה של הפקודה לעיל, המפתחות והערכים מוחזרים בכותרות בודדות. אני לא יכול לחשוב על יישום עכשיו, עם זאת, אם אי פעם תצטרך לפרק את המפתחות ב-Hashtable של PowerShell, אתה יודע איך לעשות את זה!

כיצד לספור פריטי PowerShell Hashtable

יש עוד נכס שימושי hashable, לספור . כפי שהשם מרמז, מאפיין זה מחזיר את מספר המפתחות ב-hashtable.

כמו ערכים Property, כדי לקרוא ל-Count Property, השתמש בפקודה דומה לזו שלהלן:

|_+_|

הפקודה מאשרת של-hashtable, $hashtable יש 4 מפתחות.

כיצד לספור פריטי PowerShell Hashtable

כיצד ליצור Hashtable PowerShell ריק ולהוסיף מפתחות

כיצד ליצור Hashtable PowerShell ריק ולהוסיף מפתחות

עד כה, כל הדוגמאות ב-S Zone זה התמקדו במניפולציה של PowerShell hashable עם מפתחות קיימים. בסעיף זה תלמדו כיצד ליצור hashable ריק.

לאחר מכן, הוסף מפתחות ל-Hashtable.

כדי ליצור טבלת hashtable ריקה של PowerShell, פשוט הזן את @ סימן, ואחריו {} סוֹגְרַיִם. הנה דוגמה ל-hashtable ריק שנשמר במשתנה, Emptyhashtable :

|_+_|

כדי לאשר ש-Hashtable נוצר ללא ערכים, הפעל את הפקודה הקודמת. לאחר מכן, הפעל את המשתנה בעצמו.

|_+_|

השלב הבא הוא להשתמש ב- לְהוֹסִיף שיטה, מכוסה מוקדם יותר במדריך זה, כדי להוסיף מפתחות/ערכים ל-Hashtable. בדוגמה זו, אוסיף מפתח, שנקרא שֵׁם , עם ערך של מסמך .

הנה הפקודה לביצוע משימה זו.

|_+_|

לבסוף, כדי לאשר שהערכים נוספו בהצלחה, הפעל את המשתנה, $Emptyhashtable:

|_+_|

הפקודה האחרונה מאשרת שהערכים נוספו בהצלחה:

כיצד ליצור PowerShell Hashtable עם מספר ערכים ומפתח אחד

כיצד ליצור PowerShell Hashtable עם מספר ערכים ומפתח אחד

בכל הדוגמאות שסקרנו עד כה, ל-Hashtable PowerShell יש זוג מפתח/ערך אחד. עם זאת, ישנן נסיבות שבהן ייתכן שיהיה עליך מפתח יחיד ב-hashtable עם מספר ערכים.

במקרה זה, אתה למעשה רוצה ליצור hashable עם מערכים כערכים.

כדי להתחיל, אני חושב שעדיף להראות לך את הקודים שבהם השתמשתי כדי להבדיל בין hashtable למערך.

|_+_| |_+_|

לכן, כדי ליצור PowerShell hashable עם מפתחות בודדים וערכים מרובים, הרץ סקריפט דומה לזה:

|_+_|

בתסריט למעלה, שם יומן הוא מפתח hashable בעוד הערכים System, Application ו- Security מוקצים למפתח. למעשה, יצרנו מפתח זריז אחד עם מספר ערכים.

כדי לרשום את הערכים הבודדים ב- שם יומן מקש, הפעל את הפקודה למטה:

|_+_|

החלק של צילום המסך למטה המסומן (1) הוא תוצאה של ה-hashtable, $hashtableWithArrays . יתר על כן, החלק המסומן (2) מציג את התוצאה של $hashtableWithArrays.Values פקודה.

אם אתה מכיר את יומני האירועים של Windows - מערכת, יישום ואבטחה - הם שמות של יומני אירועים של Windows.

בסעיף הבא, אני אראה לך כיצד להשתמש ב-PowerShell ForEach לולאה כדי לעבור דרך ה-hashtable לעיל - ולהפעיל את Get-EventLog פקודה על 3 יומני אירועים אלה - באמצעות סקריפט PowerShell יחיד.

כיצד לשחזר את PowerShell Hashtable עם ForEach Loop

כיצד לשחזר את PowerShell Hashtable עם ForEach

בסעיף האחרון יצרתי טבל PowerShell עם מפתח יחיד עם מספר ערכים.

עבור הדוגמה בסעיף זה, שיניתי את המשתנה שמאחסן את ה-hashtable ל LogNameKeys . הנה התסריט המעודכן.

|_+_|

בחלק זה, אלמד אותך כיצד להשתמש לכל אחד כדי לעבור דרך הערכים המאוחסנים ב- שם יומן מקש והפעל את Get-EventLog פקודה.

לקורס רענון מהיר על PowerShell ForEach, להלן התחביר הכללי של פקודת PowerShell ForEach:

|_+_|

אם תחיל את התחביר לעיל על שלנו LogNames hashable, הפקודה המעודכנת תיראה כך:

השורות שמתחילות ב-# הן הערות PowerShell. |_+_|

החלק הראשון של הסקריפט הוא אותו סקריפט שיוצר את ה-Hashtable PowerShell בעל מפתח יחיד עם מספר ערכים. הנה התסריט:

|_+_|

בחלק השני של הסקריפט, המרתי את הערכים המאוחסנים ב-($LogNameKeys.Values) למחרוזות ושמרתי את התוצאה במשתנה אחר, LogNameKeysAsStrings .

|_+_|

לבסוף, בחלק השלישי של התסריט - לולאת ForEach מוצגת:

|_+_|

בחלק זה של הסקריפט, אנו אומרים ל-PowerShell לקחת כל ערך המאוחסן ב- שם יומן מפתח ( $LogNameKeysAsStrings ) – שמור את הערך הבודד הזה באופן זמני במשתנה LogNameKey - לאחר מכן, השתמש במשתנה הזמני כדי להפעיל את Get-EventLog פקודה.

כללתי את החדש ביותר פרמטר של Get-EventLog פקודה עם ערך 5 כך שהפקודה מחזירה את 5 הכניסות האחרונות של כל יומן אירועים. כאשר אתה מסתכל על סקריפט PowerShell זה עשוי להיראות מסובך. עם זאת, אם מסתכלים היטב, זה בדרך כלל קל מאוד.

כעת, העתק את הסקריפט למטה למסמך PowerShell ISE חדש והפעל אותו.

פתח את PowerShell ISE כמנהל. אם לא תפתח את PowerShell ISE כמנהל, תקבל הודעות שגיאה בגישה. |_+_|

צילום המסך למטה הציג את התוצאה של התסריט. יש 15 שורות בחלונית התוצאות - המייצגות 5 של יומני אירועי מערכת, יישום, אבטחה.

כיצד להתאים אישית דוח עם PowerShell Hashtable ו-Select-Object

כיצד להתאים אישית דוח עם PowerShell Hashtable ו-Select-Object

בסעיף האחרון, יצרנו סקריפט PowerShell שמושך את דוח יומן האירועים של Windows. הנה צילום מסך של הדו'ח

פלט ברירת המחדל של הסקריפט כולל 5 עמודות - אינדקס , זְמַן , EntryType , מָקוֹר , מזהה מופע , ו הוֹדָעָה . אם אתה שולח את זה כדוח, ייתכן שתרצה לשנות את שמות העמודות האלה לשמות שיהיו מובנים בקלות.

הנה התסריט מהקטע האחרון.

התסריט שונה מעט. עכשיו יש לי משתנה, EventLogReport ששומר את הפלט של לולאת ForEach. אסביר מדוע זה נחוץ בהמשך. |_+_|

כדי לשנות את שמות כותרות העמודות מהסקריפט הזה, נעביר את ה- Get-EventLog פקודה לא בחר-אובייקט פקודה.

לאחר מכן, צור PowerShell hashtable בתוך בחר-אובייקט פקודה שמשנה את שמות העמודות. הנה התסריט המשונה שמבצע את הקסם.

|_+_|

התסריט נראה הרבה יותר מורכב ממה שהוא באמת. עם זאת, אם תתמקד בחלק של הסקריפט שאחרי Select-Object, יהיה קל לזהות את ההבדל בין הסקריפט הזה לבין העותק הקודם.

באופן ספציפי, כללתי טבלאות hashtable ב- בחר-אובייקט בלוק של הקוד. כל hashable מתאימה אישית את הפלט של Get-EventLog פקודה.

להלן דוגמה hashtable מה- בחר-אובייקט לַחסוֹם:

|_+_|

כרגיל, ל-Hashtable PowerShell שני אלמנטים. המפתח הוא ה שֵׁם , הערך הוא ה ביטוי .

דבר נוסף שחשוב לציין הוא שבסוף כל hashable ב- בחר-אובייקט לחסום, יש פסיק (,).

לבסוף, הנה התוצאה של התסריט הסופי ב- PowerShell:

קודם לכן הבטחתי להסביר למה הצגתי $EventLogReport משתנה כדי לשמור את הפלט של לולאת ForEach. ללא משתנה זה, התוצאה הסופית תציג 3 תוצאות בודדות עבור כל אחד מ-3 יומני האירועים. עם זאת, על ידי אחסון כל התוצאות במשתנה, הצלחתי להעביר את המשתנה הזה ל-Format-Table - זה מציג את כל התוצאה כטבלה בודדת. הנה הפקודה שביצעה את הקסם. |_+_|

כיצד לייצא PowerShell Hashtable ל-CSV

כיצד לייצא PowerShell Hashtable ל-CSV

בחלק האחרון הזה, תלמדו כיצד לייצא טבלת hashtable של PowerShell ל-CSV.

בדוגמה הראשונה שלי עבור חלק זה, אני אראה לך כיצד לייצא את ה-hashtabe הזה ל-CSV.

|_+_|

כדי לייצא בהצלחה את ה-Hashtable של PowerShell זה לקובץ CSV, עליך להשתמש ב- GetEnumerator שיטה (שנדונה קודם לכן) לרשימת הערכים. אחרת, צמדי המפתח/ערך בפועל לא ייוצאו.

הנה הסקריפט שהשתנה שמייצא את הטבלת hashable שנשמרה ב- טבלת גיבוב משתנה לקובץ CSV.

|_+_|

ב הציג את התסריט למטה:

|_+_|

התסריט כולל את GetEnumerator שיטה ב-hashtable. ואז מעביר את הפלט אל בחר-אובייקט פקודה.

לבסוף, אני צינור את הפלט של בחר-אובייקט פקודה ל ייצוא-Csv פקודה. לקריאה נוספת על אופן השימוש ייצוא-Csv Cmdlet, קרא את המדריך שלנו - Powershell NoTypeInformation: יישומים ודוגמאות.

כאשר אתה מפעיל את הסקריפט הזה, הוא יוצר קובץ CSV בשם hashtable.csv , בנתיב שציינת. ראה את צילום המסך למטה עבור הפלט של קובץ ה-CSV.

|_+_|

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

הנה התסריט. כדי לייצא את הדוח ל-CSV, הוספתי את הקוד מתחת לקוד הזה בסוף הסקריפט הזה.

|_+_| |_+_|

הקוד מעביר את הפלט של ה- לכל אחד לולאה - נשמר ב- EventLogReport משתנה - ל- פקודת ייצוא-Csv . קובץ ה-CSV שנוצר מוצג בצילום המסך למטה.

זהו זה - מדריך מקיף על PowerShell hashable! אני מקווה שמצאת את זה מועיל?

אם מצאתם את זה מועיל, אנא הצביעו כן לשאלה האם הפוסט הזה היה מועיל למטה.

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

לבסוף, לעוד PowerShell tech S Zones, בקר בדף המדריך שלנו ל-Windows PowerShell. ייתכן גם שתמצא את דף העבודה מהבית שלנו מועיל מאוד.

הפניות וקריאה נוספת

  1. כל מה שרצית לדעת על טבלאות hashtables
  2. שלב מערכים וטבלאות Hash ב- PowerShell בשביל הכיף והרווח
  3. לגבי טבלאות חשיש