PowerShell Get-Content שווה ל-Tail של PowerShell

עם האוטומציה, קריאת נתונים מקובץ טקסט היא תרחיש נפוץ. רוב שפות התכנות מציעות לפחות דרך אחת לקרוא קבצי טקסט, ו-PowerShell אינו חרוג. פקודת ה-cmdlet של PowerShell, Get-Content, היא הדמות המקבילה של PowerShell לפקודת tail, הקוראת את תוכן הקובץ הטקסט ומייבאת את הנתונים לסשן של PowerShell.

פקודת ה-cmdlet Get-Content של PowerShell היא כלי חיוני כאשר נדרש להשתמש בקבצי טקסט כקלט לתסריט שלך. אולי תסריט ה-PowerShell שלך צריך לקרוא רשימת מחשבים לצורך מעקב או לייבא תבנית דואר אלקטרוני לשליחה למשתמשים שלך. פקודת ה-PowerShell Get-Content תומכת בקלות בתרחישים אלה!

מה אם תרצה לעקוב אחר קובץ יומן בזמן אמת? כן, פקודת ה-PowerShell Get-Content יכולה לעשות את זה גם! תמשיך לקרוא את המאמר הזה, ותלמד כיצד להשתמש בפקודת Get-Content כדי לקרוא קבצי טקסט ב-PowerShell.

דרישות קדם

אם אתה מעוניין לעקוב אחר הדוגמאות במדריך זה, תצטרך את הדרישות הבאות.

  • תצטרך מחשב הפועל במערכת ההפעלה Windows 10. מדריך זה משתמש בגרסת Windows 10 גרסה 20H2. אך אל תדאג, תהיה לך בסדר גם עם הגרסה של Windows 10 שיש לך.
  • עליך להחזיק לפחות בגרסת Windows PowerShell 5.1, או PowerShell 7.1 מותקנת על המחשב שלך. כאן משתמשים בגרסת PowerShell 7.1, אך גרסה כלשהי תעבוד!
  • תהיה כותב ובודק פקודות, כך שתצטרך עורך קוד. העורכים המומלצים הם Windows PowerShell ISE, מובנה ב-Windows, ו-Visual Studio Code (VSCode). מאמר זה משתמש ב-VSCode.
  • זה גם יעזור אם תיצור ספריית עבודה על מחשבך. התיקייה העבודה יכולה להיות בכל מקום שתרצה. עם זאת, תשים לב שהדוגמאות במדריך זה נמצאות בתיקייה C:\demo.
  • כדי להתחיל, אתה צריך כמה תוכן! צור קובץ, בתיקיית העבודה שלך, בשם fruits.txt שכולל עשר פירות שונים לפשטות. אתה תשתמש בקובץ טקסט זה בכל הדוגמאות.
cherry
 berry
 apricot
 papaya
 raspberry
 melon
 peach
 tangerine
 cantaloupe
 orange

לא יודע איזו גרסת PowerShell יש לך? בקר במאמר איך לבדוק את גרסת ה-PowerShell שלך (כל הדרכים!).

קריאת קובץ טקסט והחזרת התוצאה כמערך מחרוזות

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

הקוד למטה קורא את תוכן הקובץ fruits.txt ומציג את התוצאה בקונסולת PowerShell כפי שנראה בצילום המסך למטה.

Get-Content .\fruits.txt
Retrieving the text file content using PowerShell Get-Content.

Get-Content קורא ושומר את התוכן כמערך, אבל איך אתה יודע את זה בוודאות? תחילה, שמור את התוכן לאובייקט של PowerShell שאותו אתה יכול לבחון כדי לקבוע את הסוג.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

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

Confirming that the text file content is stored as an array.

החזרת שורה מסוימת מקובץ טקסט

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

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

Showing that the indexed items in the string array start at zero index.

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

(Get-Content .\fruits.txt)[4]

אתה עשוי לשים לב שפקודת Get-Content מוקפת בסוגריים. התחביר הזה אומר ל-PowerShell להריץ את הפקודה המוקפת בסוגריים תחילה לפני פעולות אחרות.

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

Returning a specific line from Get-Content results.

מה אם אתה צריך לקבל את התוכן בשורה האחרונה? למרבה המזל, אין צורך לדעת את מספר השורות הכולל. במקום זאת, השתמש ב-[-1] כאינדקס, ו־Get-Content תציג רק את השורה האחרונה של הקובץ.

(Get-Content .\fruits.txt)[-1]

הגבלת מספר התוצאות העליונות שמוחזרות על ידי Get-Content

השתמש בפרמטר TotalCount של Get-Content כדי לאחזר מספר מסוים של שורות מקובץ טקסט. הפרמטר TotalCount מקבל ערך long המשמעווה ערך מקסימלי של 9,223,372,036,854,775,807.

לדוגמה, הפקודה למטה קוראת את התוכן ומגבילה את התוצאה לשלושה פריטים.

Get-Content .\fruits.txt -TotalCount 3

כפי שתצפה, התוצאה למטה מציגה רק את שלושת השורות הראשונות מהתחלת קובץ הטקסט.

Reading the top three results using the Get-Content command and the TotalCount parameter.

השתמש בפרמטר Tail של PowerShell כדי להחזיר תוצאות מסוף קובץ

בדוגמה הקודמת, השתמשת ב-cmdlet של PowerShell Get-Content כדי לקרוא קובץ טקסט ולהגביל את התוצאות העליונות. גם ניתן להשיג את הניצול ההפוך באמצעות PowerShell Get-Content. השתמש בפרמטר Tail של PowerShell כדי לקרוא מספר מסוים של שורות מסוף הקובץ.

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

Get-Content .\fruits.txt -Tail 4

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

Getting the results from the end of a file using the Get-Content Tail parameter.

הפרמטר Tail נהוג להשתמש בו יחד עם הפרמטר Wait. השימוש בפרמטר Wait משמר את הקובץ פתוח ובודק לתוכן חדש כל שנייה. הדגמה למטה מראה את הפרמטרים Tail ו- Wait בפעולה. כדי לצאת מהפקודה Wait, השתמש בשילוב מקשי ה-CTRL+C.

Get-Content -Path .\fruits.txt -Tail 1 -Wait
Using the wait and Tail parameters with Get-Content.

החזרת התוצאות כמחרוזת יחידה

כבר שמת לב שבדוגמאות הקודמות שטיפלת במערכי מחרוזות כפלייה כפלייה כפלייה בפוושרל. וכפי שלמדת עד כה, טבע המערכים מאפשר לך לפעול על תוכן אחד בכל פעם.

מערכים עובדים נהדר, אך יכולים להקשות על החלפת מחרוזות. הפרמטר Raw של Get-Content קורא את כל תוכן הקובץ לתוך אובייקט מחרוזת יחיד.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt -Raw
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

התמונה למטה מדגימה כי הוספת הפרמטר Raw ל־Get-Content גורמת לטיפול בתוכן כמחרוזת יחידה ולא כמערך של אובייקטים.

Confirming that the Raw parameter of Get-Content reads the file content as a single string object.

כאשר יש לך את תוכן הקובץ במחרוזת יחידה באמצעות הפרמטר Raw, מה ניתן לעשות איתו? אולי עליך למצוא ולהחליף מחרוזת בתוך תוכן הקובץ הזה. בדוגמה למטה, Get-Content קורא את תוכן הקובץ כמחרוזת יחידה. לאחר מכן, באמצעות אופרטור ה־replace, מחליף מילה ספציפית באחרת.

קשור: מציאת והחלפת מחרוזות

# Get the raw content of the text file
$fruits = Get-Content .\fruits.txt -Raw
# Display the content
$fruits
# Find and replace the word 'apricot' with 'mango'
$fruits -replace 'apricot','mango'
Reading the content of a text file as a single string and replacing a word using the replace operator.

קרא תוכן רק מקבצים שעברו את הסינון

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

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

# Add-Content יוצר את קבצי הלוג log1.log ו-log2.log אם הם עדיין לא קיימים ומוסיף את הערך שצוין
Add-Content -Value "This is the content in Log1.log" -Path C:\demo\Log1.log
Add-Content -Value "This is the content in Log2.log" -Path C:\demo\Log2.log
# אימות כי הקבצים נוצרו
Get-ChildItem C:\demo
Creating test .log files using Add-Content.

כאשר קבצי הבדיקה נוצרו, ניתן להשתמש בפרמטרים Filter ו־Path כדי לקרוא רק קבצי .log בתיקיית השורש. הכוכבית שמצויה בהגדרת הסינון מציינת ל־Get-Content לקרוא כל קובץ שמסתיים ב־.log. הכוכבית הסופית של הפרמטר נתיב מגבילה את קריאת הקבצים לתיקיית השורש בלבד.

Get-Content -Path C:\demo* -Filter *.log

כפי שמוצג בפלט המצורף למטה, רק תוכן מקבצי ה־.log מוצג.

Using the Filter parameter with PowerShell Get-Content to limit the read files.

נושאים קשורים: Get-ChildItem: רשימת קבצים, רישום, אישורים ועוד כאחד

קריאת הזרם הנתון של קובץ

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

זרמי נתונים חלופיים הם תכונה של מערכת הקבצים NTFS של Windows, ולכן זה לא יחול על Get-Content כאשר הוא בשימוש עם מערכות הפעלה שונות מ-Windows.

ניתן לראות זרמי נתונים חלופיים על ידי הרצת Get-Item עם הפרמטר Stream. כאשר אתה מתייחס לקובץ באמצעות הפרמטר Stream, Get-Item מחזיר יכולת בשם Stream, כפי שמוצג למטה. זרם תוכן ברירת המחדל של הקובץ נייצג על ידי :$DATA.

כדי להדגיש את הזרם :$DATA ברירת המחדל, השתמש ב־Get-Item כדי להציג את כל הזרמים הזמינים בקובץ fruits.txt. כפי שמוצג למטה, Get-Item מציג זרם יחיד.

Get-Item -Path .\fruits.txt -Stream *
Listing all available streams in a file using Get-Item.

פרמטר ה־Stream של Get-Content קורא באופן מפורש את תוכן הזרם :$DATA כפי שמוצג למטה. התוכן שיחזור הוא זהה לפלט שמספק Get-Content ברירת המחדל מאחר והזרם :$DATA נקרא באופן ברירת המחדל.

Get-Content -Path .\fruits.txt -Stream ':$DATA'
Explicitly reading the :$DATA stream using Get-Content.

כדי להדגים איך לאחזר זרם נתונים אלטרנטיבי באמצעות Get-Content, יש לשנות את הקובץ באמצעות Add-Content כדי להוסיף את הזרם החדש. יש להשתמש ב-Get-Item כדי להציג את הזרם החדש לצד הזרם הברירת מחדלי :$DATA, כפי שמוצג בדוגמה למטה.

# הוסף זרם נתונים אלטרנטיבי חדש בשם Secret לקובץ fruits.txt
Add-Content -Path .\fruits.txt -Stream Secret -Value 'This is a secret. No one should find this.'
Get-Item -Path .\fruits.txt -Stream *
Adding the Secret alternate data stream using Add-Content and displaying the new stream with Get-Item.

מאחר ורק הזרם :$DATA נקרא כברירת מחדל, יש להשתמש בפרמטר Stream של Get-Content כדי לאחזר את תוכן הזרם החדש Secret. כפי שמוצג למטה, תוכן הזרם Secret מוצג במקום תוכן הקובץ ברירת המחדל.

Get-Content -Path .\fruits.txt -Stream secret
Using Get-Content to read the Secret alternate data stream content.

שלבים הבאים עם PowerShell Get-Content

במאמר זה, למדתם כמה דרכים להשתמש ב-Get-Content כדי לקרוא ולנהל תוכן. אפילו למדתם ש-Get-Content גמיש מספיק כדי לקרוא תוכן מזרמי נתונים אלטרנטיביים!

עם מה שלמדתם במאמר זה, אילו דרכים נוספות אפשר להשתמש ב-Get-Content בעבודה שלך? אולי תוכלו להשתמש ב-Get-Content כדי לקבוע האם קובץ גיבוי אפשרי ישן ולהפעיל קריאה אוטומטית להפעלת משימת גיבוי?

Source:
https://adamtheautomator.com/powershell-get-content/