ייבוא CSV: קריאת קבצי CSV באמצעות PowerShell


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

קבצי CSV משמשים לאחסון נתונים טבלאיים. לדוגמה, יצרנו גיליון אלקטרוני פשוט של Excel המכיל פרטי משתמש AD עם המבנה הבא:

ADlogin

,

Email

,

Phone

,

Department

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

המשימה שלנו היא לייבא קובץ CSV זה לתוך PowerShell ולבצע שינויים ב- Active Directory עבור כל משתמש מהקובץ.

במאמר הקודם, הסברנו כיצד להשתמש ב- cmdlet Export-CSV כדי לשמור אובייקטי PowerShell בקובץ CSV.

שמור קובץ Excel זה כקובץ CSV עם ערכים מופרדים באמצעות פסיקים. קובץ הטקסט המתקבל אמור להיראות כך:

כעת, כדי לייבא קובץ CSV לתוך PowerShell, כל שעליך לעשות הוא לציין את שמו (נתיב):

$ADUsers=Import-CSV -path C:\PS\my_ad_users.csv

ה- cmdlet Import-CSV ממיר נתונים מקובץ CSV למערך PowerShell.

אם קובץ ה- CSV משתמש במפרידים שאינם פסיקים, ניתן לציין אותם באמצעות הפרמטר -Delimiter. לדוגמה, כדי לייבא קובץ CSV עם מפריד נקודה-פסיק (

;

) השתמש בפקודה:

$ADUsers=Import-CSV -path C:\PS\my_ad_users.csv -Delimiter ";"

אם אתה משתמש בתו טאב כמפריד ב- CSV, באפשרותך לציין אותו באופן הבא:

-Delimiter `t

אם ברצונך להשתמש בברירת מחדל של מפריד במערכת שלך (בהתאם לשפה ולהגדרות האזוריות של Windows), השתמש בלחצן

-UseCulture

דגל.

הפעל פקודה זו כדי לקבל את מפריד ברירת המחדל של המערכת ב- Windows:

(Get-Culture).TextInfo.ListSeparator

כעת אם תתקשר למשתנה $ADUsers, הוא יציג את התוכן של קובץ ה- CSV שלך. ה- cmdlet ממיר את תוכן הקובץ למערך. כל הערכים מקובץ ה- CSV מיוצגים כשורות.

אם קובץ ה- CSV שלך מכיל קידוד תווים מסוג UTF-8, הקפד לציין גם את סוג UTF8 כדי למנוע שגיאות קידוד:

Import-CSV -path C:\PS\my_ad_users.csv -Encoding UTF8

ניתן להציג את רשימת מאפייני האובייקט הזמינים באופן הבא:

$ADUsers|get-member

ניתן לראות ששורות המערך מכילות PSCustomObjects, שאלמנטים שלהם ניתנים לגישה לפי שמות עמודות מקובץ ה- CSV שלך.

באפשרותך להציג את כל הערכים מעמודה מסוימת:

$ADusers.email

או תכונות האובייקט שצוינו:

$ADusers| Select-Object Email, Phone

אפשרות שימושית נוספת היא לגשת ישירות לאובייקט מסוים במערך. לדוגמה, הפעל את הפקודה הבאה כדי לקבל את הערך של שורה 4 (המספור מתחיל ב- 0):

$ADusers[3]

אם ברצונך לשנות את התכונות של משתמשי Active Directory שציינת בקובץ ה- CSV שלך, פשוט השתמש בלולאה ForEach כדי לחזור על כל השורות במערך $ADUsers (נשתמש ב- cmdlet Set-ADUser ממודול AD PowerShell כדי לבצע את השינויים).

חזרה על כל השורות במערך בזו אחר זו. בדוגמה זו, המשפט $_. פירושו שאנו ניגשים לשורה הנוכחית של המערך באפשרותך לקבל את הערך של עמודה מסוימת מהשורה הנוכחית על-ידי גישה אליה באמצעות שם העמודה. לדוגמה, כדי להציג את הערך ADLogin מהשורה הנוכחית, עיין בשורה השניה. ובשורה השלישית אנו מחפשים משתמש ב- AD לפי הערך של עמודת ADLogin ומשנים את ערכי התכונות שלו:

$ADUsers | ForEach-Object {
	Write-host $_.ADLogin
	Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone -Department $_.Department -EmailAddress $_.Email 
}

באפשרותך להחליף קובץ script זה ב- PowerShell קומפקטי יותר בשורה אחת:

Import-Csv C:\PS\my_ad_users.csv | foreach {Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone -Department $_.Department -EmailAddress $_.Email}

לפעמים אתה עשוי למצוא את הפורמט להלן נוח יותר. כאן אנו ניגשים לשורה הנוכחית של המערך דרך

$User

משתנה שהגדרנו במשפט ForMuch:

ForEach ($User in $ADUsers){
$samaccountname = $User.ADlogin
$email = $user.Email
Write-host $samaccountname
Write-host $email
}

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

$ADUsers | add-member -membertype NoteProperty -name Date -value (Get-Date -Format dd/MM/yyyy)

להלן תרחישים נוספים שבהם באפשרותך להשתמש ב- cmdlet Import-CSV כדי לבצע פעולות ניהוליות במספר רב של אובייקטים:

  • יצא את תיבות הדואר של Exchange לקבצי PST:

    Import-CSV "C:\ps\user_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst

  • הוסף משתמשים לקבוצת אבטחה של AD באמצעות PowerShell:

    Import-CSV .\users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}

    או מקרה דומה של הוספת משתמשים לקבוצת Azure AD:

    Import-CSV "C:\PS\add_m365_members.csv" | ForEach-Object {
    Add-UnifiedGroupLinks -Identity it_dept -LinkType Members -Links $_.member
    }

  • קבל מידע על המשתמש מ-AD:

    Import-Csv c:\ps\usernsme_list.csv | ForEach {
    Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
    Select Name, telephoneNumber |
    Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8
    }

    לחלופין, השתמש ב- Set-ADUser כדי לשנות את התכונות של משתמשים ספציפיים:

    Import-Csv "C:\ps\modifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName -Title $_.Title -MobilePhone $_.MobilePhone}

    עדכן תמונות משתמשים ב- Active Directory:

    Import-Csv C:\PS\import.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}

  • צור משתמשים בצובר ב- Active Directory מרשימה בקובץ CSV.