ส่งออก-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


