ค้นหาเว็บไซต์

ส่งออก-CSV - ส่งออกเป็นไฟล์ CSV ใน PowerShell


PowerShell Export-CSV cmdlet แปลงวัตถุเป็นข้อความ CSV (ค่าที่คั่นด้วยเครื่องหมายจุลภาค) และบันทึกเป็นไฟล์ CSV Export-CSV cmdlet มีอยู่ใน Microsoft.PowerShell.Utility โมดูล PowerShell สร้างไฟล์ CSV ของออบเจ็กต์ที่ส่งผ่านไป

เมื่อใช้ Export-CSV cmdlet คุณสามารถสร้างสเปรดชีตและส่งออกเอาต์พุตของออบเจ็กต์เป็นไฟล์ CSV ได้อย่างง่ายดาย

แต่ละออบเจ็กต์คือแถวในไฟล์ CSV ที่มีค่าคุณสมบัติของออบเจ็กต์ พารามิเตอร์ Path ระบุตำแหน่งที่จะส่งออกไฟล์ CSV ในไดเร็กทอรีที่กำหนด

พารามิเตอร์ NoTypeInformation จะลบส่วนหัวข้อมูล #TYPE ออกจากเอาต์พุต CSV

เมื่อใช้ Export-CSV cmdlet ใน PowerShell คุณสามารถผนวกเอาต์พุต CSV ต่อท้ายไฟล์ที่ระบุได้

ระบุตัวคั่นเพื่อใช้แยกค่าคุณสมบัติ ระบุการเข้ารหัสสำหรับไฟล์ CSV ที่ส่งออก และสร้างไฟล์ CSV ที่มีส่วนหัว

ในบทความนี้ ผมจะอธิบายวิธีใช้ Export-CSV cmdlet เพื่อแปลงออบเจ็กต์เป็นไฟล์ CSV และ PowerShell ส่งออก CSV พร้อมตัวอย่างต่างๆ

มาฝึกซ้อมกันเถอะ!

ไวยากรณ์การส่งออก PowerShell-CSV

ไวยากรณ์:

PowerShell Export-CSV แปลงออบเจ็กต์เป็นสตริงค่าที่คั่นด้วยเครื่องหมายจุลภาค (CSV) และเขียนลงในไฟล์ CSV ใน PowerShell จะส่งออกเป็นรูปแบบไฟล์ CSV

Export-Csv
      -InputObject <PSObject>
      [[-Path] <String>]
      [-LiteralPath <String>]
      [-Force]
      [-NoClobber]
      [-Encoding <Encoding>]
      [-Append]
      [[-Delimiter] <Char>]
      [-IncludeTypeInformation]
      [-NoTypeInformation]
      [-QuoteFields <String[]>]
      [-UseQuotes <QuoteKind>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

พารามิเตอร์:

ผนวก: ใช้พารามิเตอร์นี้หากคุณต้องการ Export-CSV เพื่อเขียนเนื้อหา CSV ไปยังเอาต์พุตของไฟล์ที่ระบุ

หากไม่ได้ระบุพารามิเตอร์ Export-CSV จะแทนที่เนื้อหาไฟล์โดยไม่มีคำเตือน

ตัวคั่น: ค่าเริ่มต้นคือเครื่องหมายจุลภาค (,) เพื่อคั่นค่าคุณสมบัติ

ใช้พารามิเตอร์นี้เพื่อระบุตัวคั่นอื่น เช่น อัฒภาค (;), โคลอน (:) หรืออื่นๆ

การเข้ารหัส: การเข้ารหัสเริ่มต้นคือ utf8NOBOM

ใช้พารามิเตอร์นี้เพื่อระบุการเข้ารหัสสำหรับไฟล์ CSV ที่เอ็กซ์พอร์ต ค่าที่ยอมรับได้สำหรับพารามิเตอร์การเข้ารหัสนี้มีดังต่อไปนี้

ascii,bigendianunicode,bigendianutf32,oem,unicode,utf7,utf8,utf8BOM, utf8NOBOM,utf32 

เส้นทาง: พารามิเตอร์ที่จำเป็นระบุเส้นทางตำแหน่งเพื่อบันทึกไฟล์ CSV ที่ส่งออก

NoTypeInformation: พารามิเตอร์นี้จะลบส่วนหัวข้อมูล #TYPE ออกจากเอาต์พุต

มาทำความเข้าใจกับ Export-CSV cmdlet ด้วยตัวอย่าง

PowerShell Export-CSV - ข้อมูล BIOS

ในตัวอย่างนี้ เราจะใช้ Get-WmiObject เพื่อรับข้อมูล BIOS บนเครื่องคอมพิวเตอร์และส่งออกออบเจ็กต์เป็นไฟล์ CSV

Get-WmiObject -Class Win32_Bios | Select-Object -Property BIOSVersion,Manufacturer,Version,ReleaseDate | Export-CSV -Path D:\PowerShell\ComputerDetails.csv -NoTypeInformation

ในสคริปต์ PowerShell ข้างต้น

Get-WmiObject รับข้อมูลเกี่ยวกับคลาส Win32_Bios และส่งวัตถุผลลัพธ์ไปยัง Select-Object cmdlet

Select-Object ใช้พารามิเตอร์ Property เพื่อเลือกคุณสมบัติของ BIOS เช่น BIOSVersion, Version, Manufacturing และ ReleaseDate และส่งออบเจ็กต์ BIOS เหล่านี้ไปที่ Export-CSV cmdlet

ส่งออก-CSV แปลงออบเจ็กต์เป็นสตริง CSV (ค่าที่คั่นด้วยเครื่องหมายจุลภาค) และส่งออกเป็นไฟล์ CSV ณ ตำแหน่งที่ระบุโดยพารามิเตอร์ Path มันส่งออกเป็นไฟล์ในรูปแบบ CSV

พารามิเตอร์ NoTypeInformation ลบส่วนหัวข้อมูล #TYPE ออกจากไฟล์เอาต์พุต CSV

การใช้ Import-CSV cmdlet ใน PowerShell ทำให้เราสามารถนำเข้าไฟล์ CSV ที่สร้างในขั้นตอนก่อนหน้านี้ได้

มันจะนำเข้าไฟล์ CSV และเขียนเนื้อหาของไฟล์ CSV บนเทอร์มินัล PowerShell ดังต่อไปนี้

สร้างไฟล์ CSV และผนวกวัตถุเข้ากับไฟล์ CSV

ในตัวอย่างนี้ เราจะสร้างไฟล์ CSV และใช้พารามิเตอร์ ผนวก เพื่อเพิ่มออบเจ็กต์ใหม่ลงในไฟล์ CSV ที่มีอยู่ดังต่อไปนี้

# Get Windows PowerShell logs having instance Id=403 and Entrytype = Information
$PowerShellLogs = Get-EventLog -LogName 'Windows PowerShell' -InstanceId 403 -EntryType Information

# Select EventId,MachineName,EntryType,Source and InstanceId property to write to csv file
$PowerShellLogs | Select-Object EventId,MachineName,EntryType,Source,InstanceId | Export-Csv -Path D:\PowerShell\PowerShellLogs.csv -NoTypeInformation

# Get Windows PowerShell logs having instance Id=300 and Entrytype = Warning
$PowerShellWarningLogs = Get-EventLog -LogName 'Windows PowerShell' -InstanceId 300 -EntryType Warning

# Select EventId,MachineName,EntryType,Source and InstanceId property to append to existing csv file
$PowerShellWarningLogs | Select-Object EventId,MachineName,EntryType,Source,InstanceId | Export-Csv -Path D:\PowerShell\PowerShellLogs.csv -NoTypeInformation -Append

ในตัวอย่างพารามิเตอร์ ส่งออก-CSV ต่อท้าย ของ PowerShell ข้างต้น

Get-EventLog cmdlet รับบันทึกเหตุการณ์จากบันทึกของ Windows

จะดึงบันทึกเหตุการณ์ตามพารามิเตอร์ LogName, InstanceId และ EntryType ที่ระบุ โดยจะจัดเก็บบันทึกเหตุการณ์ PowerShell ไว้ในตัวแปร $PowerShellLogs

ในคำสั่งที่สอง จะใช้ตัวแปร $PowerShellLogs เพื่อส่งออบเจ็กต์บันทึกเหตุการณ์ไปยัง PowerShell Export-CSV cmdlet

ส่งออก-CSV แปลงออบเจ็กต์บันทึกเหตุการณ์เป็นสตริง CSV (ค่าที่คั่นด้วยเครื่องหมายจุลภาค) และส่งออกเป็นไฟล์ CSV ในตำแหน่งที่ระบุโดยพารามิเตอร์ Path

พารามิเตอร์ NoTypeInformation จะลบส่วนหัวข้อมูล #Type ออกจากไฟล์ CSV เอาต์พุต

Get-EventLog cmdlet รับบันทึกเหตุการณ์สำหรับ InstanceId และ Entrytype ที่แตกต่างกัน และจัดเก็บออบเจ็กต์บันทึกใน $PowerShellWarningLogs

ออบเจ็กต์บันทึกเหตุการณ์ $PowerShellWarningLogs จะถูกส่งลงไปยังไปป์ไลน์ไปยัง Export-CSV cmdlet

พารามิเตอร์ Export-CSV Append ของ PowerShell เพื่อเพิ่มออบเจ็กต์ $PowerShellWarningLogs ลงในไฟล์ CSV PowerShellLogs ที่มีอยู่

ไฟล์ PowerShellLogs.csv สุดท้ายประกอบด้วยบันทึกเหตุการณ์แหล่งข้อมูลและคำเตือนสำหรับ PowerShell

ส่งออกตัวแปรเป็น CSV

PSCustomObject ใช้เพื่อสร้างข้อมูลที่มีโครงสร้างใน PowerShell มันสร้างวัตถุที่นำมาใช้ซ้ำได้

หากต้องการส่งออกตัวแปรเป็นไฟล์ CSV ให้ใช้โค้ดด้านล่าง

$custObject = [PSCustomObject]@{
     Drive = "C:\"
     Description = "C Drive Disk Size Space"
     Id = 1
}

$custObject | Export-Csv -Path D:/PowerShell/Comp-Details.csv -NoTypeInformation

ในสคริปต์ CSV ส่งออก PowerShell ข้างต้น

การใช้ PSCustomObject จะสร้างออบเจ็กต์ข้อมูลที่มีโครงสร้างซึ่งมีตัวแปร Drive, Description และ Id และจัดเก็บออบเจ็กต์ในตัวแปร $custObject

ในคำสั่งที่สอง ออบเจ็กต์ $custObject จะถูกส่งลงไปที่ไปป์ไลน์ไปยัง Export-CSV cmdlet

PowerShell Export-Csv แปลงออบเจ็กต์เป็นสตริง CSV (ค่าที่คั่นด้วยเครื่องหมายจุลภาค) และสร้างไฟล์ CSV และส่งออกไฟล์ CSV ไปยังตำแหน่งที่ระบุโดยพารามิเตอร์ Path

โดยจะเขียนเอาต์พุตของออบเจ็กต์ลงในไฟล์ในรูปแบบ CSV

NoTypeInformation จะลบส่วนหัวข้อมูล #TYPE ออกจากเอาต์พุต CSV

ผลลัพธ์ของสคริปต์ด้านบนดังต่อไปนี้เมื่อเราใช้ Get-Content cmdlet เพื่ออ่านไฟล์ CSV

PS D:\PowerShell> Get-Content .\Comp-Details.csv

"Drive","Description","Id"
"C:\","C Drive Disk Size Space","1"

เขียนทับไฟล์ CSV แบบอ่านอย่างเดียวโดยใช้ Force

ในตัวอย่างข้างต้น เราส่งออกตัวแปรเป็นไฟล์ CSV

ตอนนี้ให้ไฟล์นั้นเป็นแบบอ่านอย่างเดียวและลองเขียนเนื้อหาใหม่ลงในไฟล์แบบอ่านอย่างเดียวดังต่อไปนี้

$myObject = [PSCustomObject]@{
     Drive = "C:\"
     Size = "50GB"
    
}

$myObject | Export-Csv -Path D:/PowerShell/Comp-Details.csv -NoTypeInformation

ในสคริปต์ PowerShell ส่งออก CSV ข้างต้น

PSCustomObject สร้างออบเจ็กต์ที่มีข้อมูลไดรฟ์และขนาดดิสก์

เมื่อเราพยายามส่งออกออบเจ็กต์เป็นไฟล์ CSV ที่เป็นแบบอ่านอย่างเดียว ระบบจะแสดงข้อยกเว้นดังต่อไปนี้

Export-Csv : Access to the path 'D:\PowerShell\Comp-Details.csv' is denied.
At line:7 char:13
+ $myObject | Export-Csv -Path D:/PowerShell/Comp-Details.csv -NoTypeIn ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (:) [Export-Csv], UnauthorizedAccessException
    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ExportCsvCommand

หากต้องการเขียนลงในไฟล์ CSV อย่างจริงจัง ให้ใช้พารามิเตอร์ Force

การใช้พารามิเตอร์ PowerShell ส่งออก-CSV บังคับ บังคับให้ส่งออกเพื่อเขียนเป็นไฟล์ CSV ใช้คำสั่งด้านล่างเพื่อเขียนไปยังไฟล์ CSV แบบอ่านอย่างเดียวอย่างเข้มแข็ง

$myObject = [PSCustomObject]@{
     Drive = "C:\"
     Size = "C Drive Disk Size Space"
    
}
 
$myObject | Export-Csv -Path D:/PowerShell/Comp-Details.csv -Force -NoTypeInformation

เคล็ดลับเด็ด: วิธีเพิ่มพื้นที่ว่างในดิสก์ใน PowerShell!

การใช้ PowerShell Export-CSV NoClobber

ไฟล์ PowerShell Export-CSV เขียนเอาต์พุตเป็นไฟล์ CSV และเขียนทับไฟล์ที่มีอยู่หากมีอยู่บนดิสก์

การใช้พารามิเตอร์ Export-CSV NoClobber ทำให้เกิดข้อผิดพลาดหากพยายามเขียนทับและป้องกันไม่ให้เขียนทับไฟล์ CSV ที่มีอยู่

ลองพิจารณาตัวอย่างข้างต้นเพื่อแสดงฟังก์ชันการทำงานของ Noclobber ส่งออก CSV ของ PowerShell

PS C:\> Get-WmiObject -Class Win32_Bios | Select-Object -Property BIOSVersion,Manufacturer,Version,ReleaseDate | Export-CSV -Path D:\PowerShell\ComputerDetails.csv -NoClobber 

ในเอาต์พุต PowerShell ไปยังสคริปต์ไฟล์ข้างต้น เราได้ใช้พารามิเตอร์ ส่งออก-CSV NoClobber

หากไฟล์มีอยู่แล้วในเส้นทางที่ระบุ ไฟล์นั้นจะทำให้เกิดข้อผิดพลาดและป้องกันไม่ให้เขียนทับเอาต์พุตเป็นไฟล์ CSV

ผลลัพธ์ของตัวอย่างข้างต้นในการเขียนเอาต์พุตเป็นไฟล์ CSV คือ:

การใช้พารามิเตอร์ตัวคั่น PowerShell Export-CSV

เมื่อคุณส่งออกไฟล์ CSV ตามค่าเริ่มต้นในไฟล์ CSV จะถูกคั่นด้วยเครื่องหมายจุลภาค

คุณสามารถเปลี่ยนตัวคั่นในไฟล์ CSV ได้โดยใช้พารามิเตอร์ Export-CSV Delimiter

การใช้พารามิเตอร์ Delimiter ช่วยให้คุณสามารถระบุตัวคั่นได้

ตัวอย่างเช่น อ้างถึงตัวอย่างข้างต้นเพื่อเพิ่มพื้นที่ว่างในดิสก์โดยใช้ PowerShell ให้ใช้ตัวคั่นเป็น ';' (อัฒภาค) แทนค่าเริ่มต้น ',' (ลูกน้ำ)

Get-WmiObject -Class Win32_Bios | Select-Object -Property BIOSVersion,Manufacturer,Version,ReleaseDate | Export-CSV -Path D:\PowerShell\ComputerDetails.csv -NoTypeInformation -Delimiter ';' 

ในตัวอย่างตัวคั่น CSV ส่งออก PowerShell ข้างต้น

มันเขียนเอาต์พุตไปยังไฟล์ CSV คั่นด้วยตัวคั่น ';' (อัฒภาค)

ผลลัพธ์ของตัวอย่างข้างต้นคือ:

บทสรุป

คุณสามารถไปป์วัตถุใดๆ ไปยัง ส่งออก-CSV cmdlet ใน PowerShell เพื่อเขียนไปยังไฟล์ CSV

ผลลัพธ์ของ PowerShell Export-CSV cmdlet คือสตริง CSV ที่บันทึกลงในไฟล์ในตำแหน่งที่ระบุโดยพารามิเตอร์ Path

คุณสามารถค้นหาหัวข้อเพิ่มเติมเกี่ยวกับคำสั่ง PowerShell Active Directory และพื้นฐานของ PowerShell ได้ในหน้าแรกของ ShellGeek

บทความที่เกี่ยวข้อง