17/01/2021

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

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

 


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

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

בפרק הקודם למדנו כיצד ליבא קבצי 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:



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

אז בתור התחלה אם תריצו 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" (אני מודה שאף פעם לא ניסיתי לשנות את המיקום שלהם, אך אם בא לכם בשביל הספורט, נסו ועדכנו אותי בתגובות, האם הצלחתם או לא), לצורך הדגמה נריץ את הפקודה ונראה את השוני:

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




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

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 ניתן למצוא כאן
לפורום בנושא באתר devhub.co.il כאן

אין תגובות:

פרסום תגובה

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

תודה :)