วิธีใช้ Export-CSV ใน PowerShell
ด้วย PowerShell คุณสามารถดึงข้อมูลทุกประเภทจากบริการต่างๆ เช่น Active Directory หรือ Microsoft 365 ได้ แต่บางครั้งคุณจำเป็นต้องประมวลผลข้อมูลนี้เพิ่มเติมใน Excel หรือระบบอื่น ในการดำเนินการนี้ เราสามารถใช้ฟังก์ชันส่งออก-CSV ใน PowerShell
ฟังก์ชัน Export-CSV จะแปลงออบเจ็กต์ PowerShell ให้เป็นสตริง CSV และบันทึกเป็นไฟล์ CSV หากคุณต้องการเพียงสตริง CSV คุณสามารถใช้ฟังก์ชัน ConvertTo-CSV ใน PowerShell ได้
ในบทความนี้ เราจะมาดูวิธีใช้ฟังก์ชันส่งออก-CSV วิธีป้องกันข้อผิดพลาดทั่วไป และมีตัวเลือกต่างๆ ใดบ้างที่คุณสามารถใช้ได้
PowerShell ส่งออก-CSV
Export-CSV cmdlet ค่อนข้างตรงไปตรงมาและมีคุณสมบัติที่มีประโยชน์เพียงไม่กี่รายการเท่านั้น:
- เส้นทาง - (จำเป็น) ตำแหน่งของไฟล์ CSV
- NoTypeInformation - ลบส่วนหัวข้อมูลประเภทออกจากเอาต์พุต ไม่จำเป็นอีกต่อไปใน PowerShell 6
- ตัวคั่น - ค่าเริ่มต้นคือลูกน้ำ แต่คุณสามารถเปลี่ยนได้
- ต่อท้าย - ต่อท้ายไฟล์ CSV ที่มีอยู่
- บังคับ - มีประโยชน์เมื่อใช้ร่วมกับการผนวก
- NoClobber - อย่าเขียนทับไฟล์ที่มีอยู่
- UseQuotes - (PowerShell 7 เท่านั้น) ตัดค่าด้วยเครื่องหมายคำพูดหรือไม่
เราจะเริ่มต้นด้วยสิ่งง่ายๆ โดยส่งออกผู้ใช้ Microsoft 365 ของเราเป็นไฟล์ CSV ฉันจะใช้ Azure AD ตลอดตัวอย่างที่นี่ ดังนั้น หากคุณต้องการปฏิบัติตาม ตรวจสอบให้แน่ใจว่าคุณได้เชื่อมต่อ Azure AD ก่อน
Get-AzureADUser cmdlet ส่งคืนผู้ใช้ทั้งหมดในผู้เช่า Microsoft 365 ของคุณ ดังที่คุณเห็นในภาพหน้าจอด้านล่าง สิ่งที่เราจะทำคือส่งออกเอาต์พุตนี้เป็นไฟล์ CSV ในการดำเนินการนี้ เราเพียงแค่วาง Export-CSV cmdlet ไว้ด้านหลัง:
Get-AzureADUser | Export-Csv c:\temp\azureadusers.csv -NoTypeInformationฟังดูง่ายใช่มั้ย? ถ้าคุณเปิดไฟล์ CSV คุณจะสังเกตเห็นว่าเราได้รับมากกว่าที่เราต้องการเล็กน้อย และไม่ใช่รายการที่ดีที่เราเคยเห็นใน PowerShell มาก่อน
แล้วทำไมสิ่งนี้ถึงเกิดขึ้น? Export-CSV cmdlet จะส่งออก วัตถุแต่ละรายการ จาก Get-AzureADUser cmdlet หากเราค้นหาผู้ใช้ Azure AD รายเดียว คุณจะเห็นข้อมูลทั้งหมดที่ส่งคืนจากออบเจ็กต์ผู้ใช้รายเดียว:
Get-AzureADUser -Filter "Displayname eq 'Rudy Mens'" | select *วิธีส่งออกข้อมูลที่ถูกต้องด้วย Export-CSV
สิ่งที่เราต้องทำคือขั้นแรกเลือกข้อมูล (คุณสมบัติ) ที่ถูกต้องที่เราต้องการก่อนที่เราจะส่งออกออบเจ็กต์ผู้ใช้เป็นไฟล์ CSV
Get-AzureADUser | select userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformationสิ่งนี้จะส่งคืนฟิลด์ที่เลือกจากผู้ใช้แต่ละรายเป็นไฟล์ CSV ที่ดีที่เราสามารถใช้ได้จริง:
ต่อท้ายไฟล์ CSV ด้วย PowerShell
ในบางโอกาส คุณอาจต้องการผนวกข้อมูลลงในไฟล์ CSV ด้วย PowerShell สมมติว่าเราต้องการเพิ่มผู้จัดการของผู้ใช้แต่ละคนลงในรายการ มีวิธีที่มีประสิทธิภาพมากกว่าในการทำเช่นนี้ แต่ในกรณีนี้ เราจะวนซ้ำผู้ใช้ทั้งหมดและรับผู้จัดการจาก Azure AD
คำแนะนำ
เรียนรู้เพิ่มเติมเกี่ยวกับการสร้างสคริปต์ PowerShell ในคู่มือฉบับสมบูรณ์นี้
สำหรับตัวอย่างนี้ เราสร้างออบเจ็กต์ PowerShell แบบกำหนดเองที่จะเก็บข้อมูลผู้ใช้และผู้จัดการ ด้วยสวิตช์ -append เราสามารถเพิ่มผู้ใช้ลงในไฟล์ CSV
$users = Get-AzureADUser
$users | ForEach-Object {
$Manager = Get-AzureADUserManager -ObjectId $_.ObjectId
$user =[pscustomobject]@{
'Displayname' = $_.displayname
'Jobtitle' = $_.jobtitle
'Department' = $_.Department
'Manager' = $manager.displayname
}
$user | Export-CSV c:\temp\usermanager.csv -Append -NoTypeInformation -Force
}ฉันได้เพิ่มสวิตช์ -Force ด้วยเช่นกัน วิธีนี้จะสร้างไฟล์ CSV ขึ้นมาหากไม่มีอยู่ และออบเจ็กต์ที่มีคุณสมบัติไม่ตรงกันยังสามารถเขียนลงในไฟล์ CSV ได้ มันจะเขียนเฉพาะคุณสมบัติที่ตรงกัน ส่วนคุณสมบัติอื่นๆ จะถูกละทิ้ง
พารามิเตอร์ Export-CSV ที่มีประโยชน์อื่นๆ ใน PowerShell
มีพารามิเตอร์อื่นๆ สองสามตัวที่มีประโยชน์เมื่อคุณใช้ Export-CSV cmdlet ใน PowerShell
ไม่โคลบเบอร์
ตามค่าเริ่มต้น Export-CSV cmdlet จะเขียนทับไฟล์ที่มีอยู่เมื่อใช้ หากคุณไม่ต้องการสิ่งนี้ คุณสามารถเพิ่มพารามิเตอร์ -NoClobber ได้ ด้วยวิธีนี้ หากไฟล์มีอยู่แล้ว คุณจะได้รับข้อผิดพลาด ซึ่งทำให้คุณไม่สามารถเขียนทับไฟล์ได้
ตัวคั่น
ค่าในไฟล์ Comma Separated Values File (CSV) จะถูกคั่นด้วยเครื่องหมายจุลภาคตามค่าเริ่มต้น การใช้งานบางประเภทไม่ได้เป็นไปตามมาตรฐานนี้ ดังนั้น เมื่อคุณต้องการนำเข้าข้อมูลไปยังแอปพลิเคชันอื่นที่ต้องใช้เครื่องหมายอัฒภาค ( ; ) เป็นต้น คุณสามารถเปลี่ยนตัวคั่นได้
ตรวจสอบให้แน่ใจว่าคุณใส่ตัวคั่นใหม่ในเครื่องหมายคำพูด:
Get-AzureADUser | Select-Object -Property userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformation -Delimiter ';'ใช้คำคม
เมื่อคุณส่งออกวัตถุใน PowerShell 5 หรือ 6 ค่าทั้งหมดจะถูกล้อมด้วยเครื่องหมายคำพูด ในบางครั้งคุณอาจไม่ต้องการสิ่งนั้น หากคุณใช้ PowerShell 7 คุณสามารถใช้พารามิเตอร์ -UseQuotes ได้
พารามิเตอร์นี้มีสองตัวเลือก:
- ตามความจำเป็น
- เสมอ (ค่าเริ่มต้น)
- ไม่เคย
Get-Process | export-csv -Path c:\temp\process.csv -UseQuotes AsNeededห่อขึ้น
Export-CSV cmdlet เป็นฟังก์ชัน PowerShell ที่ฉันใช้ค่อนข้างบ่อย การดึงข้อมูลออกจาก Microsoft 365 อย่างรวดเร็วสำหรับรายงานหรืองานอื่นๆ มีประโยชน์มาก ตรวจสอบให้แน่ใจว่าคุณได้เลือกคุณสมบัติที่ถูกต้องก่อนเมื่อส่งออกออบเจ็กต์ นี่เป็นข้อผิดพลาดที่เกิดขึ้นบ่อยที่สุดเมื่อต้องส่งออกข้อมูล PowerShell ไปยัง Excel
หากคุณมีคำถามใด ๆ เพียงแค่แสดงความคิดเห็นด้านล่าง




