17/01/2021

מדריך ל PowerShell בעברית חלק 8 - איך לייצא מידע לקובץ CSV מ-PowerShell?

חלק 8 - איך לייצא מידע לקבצי CSV מ PowerShell?

 


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

לכלל הפוסטים והמדריכים בנושא ה PowerShell ניתן למצוא כאן

בפרק הקודם למדנו כיצד ליבא קבצי CSV, אך מה לעשות אם אנחנו צריכים ליצא קובץ CSV? ליצא מידע מהמערכת ולהעבירו למישהו וכד', בדיוק לכך נועדה הפקודה export-csv

כמו שכבר ראינו, PowerShell מאוד נוחה ומאוד פשוטה, והכי חשוב מאוד הגיונית, אם יבוא של קובץ נבצע בעזרת הפקודה Import-csv, אז איך בעצם נבצע יצוא? - ניחשתם נכון, בעזרת export-csv.

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

Get-Process notepad| export-csv -Path 'C:\Users\lev\Desktop\PowerShell - CSV post\test.csv'

הפלט יהיה דיי מסורבל האמת ולא הכי ברור, כבר למדנו בפרקים הקודמים שניתן לבצע בחירה של העמודות (Property) שאותם נרצה להציג בעזרת הפקודה select-object, אז נוסיף אותה גם כן והתוצאה הסופית של הפקודה תהיה כזאת:

Get-Process notepad|select ProcessName, id, cpu| export-csv -Path 'C:\Users\lev\Desktop\PowerShell - CSV post\test.csv'

וזה התוכן שנקבל בתוך קובץ ה CSV:



בטח אתם שואלים את עצמכם מה זה ה"Type" הזה שהופיע לנו?

אז בתור התחלה אם תריצו Get-process notepad | get-member, למעלה תקבלו את המידע הזה:


כרגע לא ממש מעניין אותנו מה זה (ובכל זאת בחרתי להוסיף משהו קטן על הנושא ולכן במדריך המצולם אנחנו נותנים דוגמאות והסבר קצר על מה זה), אבל בשביל שזה לא יופיע לנו בקובץ אקסל, אנחנו יכולים להגיד ל PowerShell שאנחנו פשוט לא רוצים את זה שם עלידי הוספת הפרמטר "NoTypeInformation" מה שיגרום לכך שהפקודה תשתנה קצת ותראה ככה: 

Get-Process notepad |export-csv -Path 'C:\Users\lev\Desktop\PowerShell - CSV post\test.csv' -NoTypeInformation

בתור ברירת מחדל, אם אנחנו נריץ את הפקודה על פרוססים שונים, הקובץ כל פעם יתחלף, ובעצם המידע לא יתווסף אלה ישוכתב, בשביל שהוא לא ישוכתב אנחנו נצטרך להשתמש בפרמטר "Append" (בתרגום לעברית : לצרף, להוסיף), ונצרף אותו לפני "NoTypeInformation" (אני מודה שאף פעם לא ניסיתי לשנות את המיקום שלהם, אך אם בא לכם בשביל הספורט, נסו ועדכנו אותי בתגובות, האם הצלחתם או לא), לצורך הדגמה נריץ את הפקודה ונראה את השוני:

תחילה נריץ את הקובץ הקודם ונראה את התוצאה - הקובץ שנוצר:




במידה ונריץ את אותה הפקודה ונחליף את השם של הפרוסס, הקובץ ישוכתב, ועל מנת שהוא לא ישוכתב אלה יתווסף אל המידע הקיים בקובץ, אנחנו נוסיף את הפרמטר "Append" ונראה את התוצאה:

Get-Process taskhostw |export-csv -Path 'C:\Users\lev\Desktop\PowerShell - CSV post\test.csv' -Append  -NoTypeInformation



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


להלן דוגמא "מהחיים" לסקריפט שמיבא את כלל תיבות הדואר מתוך ה-365 ובודק גודל תיבה:

$users = Import-Csv "C:\CSV Test\Alias_test.csv"
 
 foreach ($user in $users) {

 Get-MailboxStatistics -Identity $user.UserName |

 Select-Object @{l="User Name";e="DisplayName"},

  @{l="Mail Box Size";e="TotalItemSize"}, @{l="Total Emails?";e="itemcount"} |

  Export-Csv "C:\CSV Test\Mailboxe_size.csv" -Append -NoTypeInformation
 } #end of ForEach loop




לכל שאלה המייל שלי: levl@leidertech.co.il







לעוד מדריכים:

לכלל הפוסטים והמדריכים בנושא ה PowerShell ניתן למצוא כאן


אין תגובות:

הוסף רשומת תגובה

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

תודה :)