PowerShell - เปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ [5 วิธี]
ใช้ Out-File Cmdlet
ใช้ cmdlet Out-File เพื่อเปลี่ยนเส้นทางเอาต์พุต PowerShell ไปยังไฟล์
ใช้ Out-File Cmdlet:
Get-Process -Name chrome | Out-File -FilePath E:\Test\OuputFile.txtGet-Process ใช้เพื่อดึงกระบวนการทั้งหมดที่กำลังทำงานอยู่บนเครื่องของเรา (คอมพิวเตอร์ในระบบ) เราสามารถกรองข้อมูลนี้ได้โดยการระบุพารามิเตอร์ ตัวอย่างเช่น เราใช้พารามิเตอร์ -Name เพื่อรับกระบวนการ chrome ทั้งหมดที่ทำงานอยู่ในปัจจุบัน หากไม่มีพารามิเตอร์ cmdlet นี้จะได้รับกระบวนการทั้งหมดที่ทำงานอยู่บนเครื่องคอมพิวเตอร์ในปัจจุบัน
Out-File cmdlet ใช้เพื่อส่งข้อมูลที่ได้รับจากกระบวนการก่อนหน้าไปยังไฟล์ที่กำหนด cmdlet นี้ใช้ระบบการจัดรูปแบบของ PowerShell โดยปริยายเพื่อเขียนไปยังไฟล์ที่กำหนดและรับการแสดงการแสดงผลที่แน่นอนเป็นคอนโซล PowerShell
Out-File เขียนข้อมูลที่ได้รับไปที่ OutputFile.txt ซึ่งเราระบุโดยใช้ชื่อพารามิเตอร์ -FilePath โปรดจำไว้ว่าคำสั่งข้างต้นจะสร้างไฟล์ .txt หากไม่มีอยู่ และจะเขียนทับไฟล์หากมีอยู่ ดังนั้น ให้ใช้พารามิเตอร์ -Append หากคุณไม่ต้องการสูญเสียเนื้อหาที่มีอยู่ หรือใช้ -NoClobber เพื่อหลีกเลี่ยงการเขียนทับไฟล์
แนะนำให้ใช้ cmdlet Out-File นี้ หากเราจำเป็นต้องใช้พารามิเตอร์เพื่อกรองข้อมูล มิฉะนั้นตัวเลือกการเปลี่ยนเส้นทาง (เราจะเรียนรู้ในอีกสักครู่) จะดีกว่า ตัวอย่างเช่น เราสามารถใช้พารามิเตอร์ต่อไปนี้กับ Out-File
-FilePathใช้เพื่อระบุตำแหน่งและชื่อไฟล์
-Appendมันถูกใช้เพื่อผนวกผลลัพธ์ไปยังไฟล์ที่มีอยู่
-Forceเราสามารถเขียนทับไฟล์แบบอ่านอย่างเดียวได้โดยใช้พารามิเตอร์นี้
-Widthจำกัดจำนวนอักขระในทุกบรรทัด (ขีดจำกัดเริ่มต้นคือ
80อักขระ)-WhatIfมันถูกใช้เพื่อรันในโหมดทดสอบ
-NoClobberมันไม่อนุญาตให้เราเขียนทับไฟล์
-NoNewLineไม่อนุญาตให้เขียนอักขระขึ้นบรรทัดใหม่
การใช้ตัวดำเนินการเปลี่ยนเส้นทาง
ใช้ตัวดำเนินการเปลี่ยนเส้นทาง > และ >> เพื่อเปลี่ยนเส้นทางเอาต์พุต PowerShell ไปยังไฟล์
ใช้ > ตัวดำเนินการเปลี่ยนเส้นทาง:
Get-Process -Name chrome > E:\Test\OuputFile.txtในส่วนก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับพารามิเตอร์ Get-Process cmdlet และ -Name แล้ว ที่นี่ เราใช้ตัวดำเนินการเปลี่ยนเส้นทาง > เพื่อเขียนเอาต์พุต PowerShell ไปยังไฟล์ มันจะสร้าง OutputFile.txt หากไม่มีอยู่ในไดเร็กทอรีที่กำหนด และเขียนทับหากมี
เมื่อใช้ตัวดำเนินการ > เราจะสามารถเขียนไปยังไฟล์ที่ระบุได้หากทุกอย่างทำงานได้ดี เนื่องจากมันถูกใช้กับสตรีม Success Only อย่างไรก็ตาม มีตัวดำเนินการเปลี่ยนเส้นทางหลายรูปแบบในการเขียนสตรีมที่แตกต่างกัน ลองดูคำอธิบายและ cmdlet ที่เทียบเท่ากัน
| Redirection Operator | Description | Equivalent Cmdlet |
|---|---|---|
> |
It is used to write a Success only stream. |
Write-Output |
2> |
It is used to write an Error only stream. |
Write-Error |
3> |
We can use it to write a Warning only stream. |
Write-Warning |
4> |
It is used to write Verbose only steam. |
Write-Verbose |
5> |
It is used to write Debug only steam. |
Write-Debug |
6> |
It is used to write Information only steam. |
Write-Information |
*> |
All |
ไม่ต้องกังวลหากคุณกำลังมองหาตัวดำเนินการเปลี่ยนเส้นทางเพื่อต่อท้ายไฟล์ เรามีคุณครอบคลุม เราสามารถใช้ตัวดำเนินการเปลี่ยนเส้นทางอื่น (>>) เพื่อผนวกเอาต์พุตในไฟล์ที่ระบุ
ใช้ >> ตัวดำเนินการเปลี่ยนเส้นทาง:
Get-Process >> E:\Test\OuputFile.txtใช้ StreamWriter .Net Class
หากต้องการเปลี่ยนเส้นทางเอาต์พุต PowerShell ไปยังไฟล์:
- สร้างอินสแตนซ์คลาส
System.IO.StreamWriterโดยใช้ cmdletNew-Object - ใช้ cmdlet
Get-Processเพื่อรับข้อมูลเกี่ยวกับกระบวนการที่กำลังทำงานอยู่ทั้งหมด - ส่งข้อมูลที่ดึงมาจากขั้นตอนก่อนหน้าไปยัง
ForEach-Objectcmdlet โดยใช้ไปป์ไลน์ (|) - ตอนนี้
ForEach-Objectวนซ้ำทุกอ็อบเจ็กต์กระบวนการและเขียนไปยังไฟล์ที่ระบุ - สุดท้าย ใช้เมธอด
.Close()เพื่อปิดอ็อบเจ็กต์StreamWriter
ใช้คลาส StreamWriter:
$streamWriter = New-Object System.IO.StreamWriter("E:\Test\Output.txt")
Get-Process | ForEach-Object {$streamWriter.WriteLine($_)}
$streamWriter.Close()ในตัวอย่างนี้ New-Object cmdlet ถูกใช้เพื่อสร้างอินสแตนซ์ใหม่ของคลาส System.IO.StreamWriter ซึ่งใช้ในการเขียนข้อความ (ข้อมูลประเภทสตริง) ลงในสตรีม ถัดไป ออบเจ็กต์ StreamWriter จะเริ่มต้นได้ด้วยเส้นทางไปยังไฟล์เอาต์พุตเป็นอาร์กิวเมนต์
Get-Process cmdlet ใช้เพื่อดึงข้อมูลรายการกระบวนการ ซึ่งถูกส่งไปยัง cmdlet ForEach-Object ForEach-Object cmdlet วนซ้ำแต่ละวัตถุกระบวนการและเขียนลงในไฟล์เอาต์พุตโดยใช้วิธี WriteLine ของวัตถุ StreamWriter
สุดท้ายนี้ มีการเรียกเมธอด ปิด ของออบเจ็กต์ StreamWriter เพื่อปิดสตรีมและปล่อยทรัพยากรที่เกี่ยวข้อง รหัสนี้จะสร้างไฟล์ชื่อ Output.txt ในไดเร็กทอรี E:\Test และเขียนเอาต์พุตของคำสั่ง Get-Process ไปที่ ไฟล์.
หมายเหตุ: คลาส
StreamWriterเป็นส่วนหนึ่งของ .NET Framework และสามารถใช้ใน PowerShell เพื่อเขียนข้อความลงในไฟล์หรือสตรีมอื่นๆ โดยมีคุณสมบัติขั้นสูงมากกว่าตัวดำเนินการเปลี่ยนเส้นทางในตัว เช่น ความสามารถในการระบุการเข้ารหัสของเอาต์พุต ต่อท้ายไฟล์ที่มีอยู่ ควบคุมขนาดบัฟเฟอร์ และล้างบัฟเฟอร์ไปยังสตรีม
ใช้ Add-Content Cmdlet
ใช้ Add-Content cmdlet เพื่อเปลี่ยนเส้นทางเอาต์พุต PowerShell ไปยังไฟล์
ใช้ Cmdlet เพิ่มเนื้อหา:
Get-Process -Name chrome | Add-Content E:\Test\FileOutput.txtคำสั่งนี้เรียกข้อมูลรายการกระบวนการโดยใช้ Get-Process cmdlet และผนวกเอาต์พุตต่อท้ายไฟล์ FileOutput.txt ใน E:\Test< ไดเร็กทอรี หากไม่มีไฟล์ที่ระบุ ไฟล์นั้นจะถูกสร้างขึ้น
คุณยังสามารถใช้พารามิเตอร์ -Encoding เพื่อระบุการเข้ารหัสของไฟล์เอาต์พุต และใช้พารามิเตอร์ -NoNewline เพื่อป้องกันไม่ให้ cmdlet เพิ่มอักขระบรรทัดใหม่ที่ส่วนท้ายของเอาต์พุต
ใช้ Cmdlet เพิ่มเนื้อหา:
Get-Process -Name chrome | Add-Content E:\Test\FileOutput.txt -Encoding UTF8 -NoNewlineAdd-Content cmdlet มีประโยชน์เมื่อเราต้องการเขียนเอาต์พุตของคำสั่ง PowerShell ลงในไฟล์ แต่ไม่จำเป็นต้องดำเนินการขั้นสูง เช่น การค้นหาหรืออ่านจากไฟล์ นอกจากนี้ ยังเป็นประโยชน์เมื่อเราต้องการผนวกเอาต์พุตเข้ากับไฟล์ที่มีอยู่ เนื่องจากไม่ได้เขียนทับเนื้อหา
ใช้ Set-Content Cmdlet
ใช้ Set-Content cmdlet เพื่อเปลี่ยนเส้นทางเอาต์พุต PowerShell ไปยังไฟล์
ใช้ชุดเนื้อหา Cmdlet:
Get-Process -Name chrome | Set-Content E:\Test\FileOutput.txtในส่วนก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับพารามิเตอร์ Add-Content และพารามิเตอร์ -Encoding แล้ว คำสั่งนี้คล้ายกับ Add-Content ซึ่งจะดึงรายการกระบวนการโดยใช้ Get-Process cmdlet และเขียนเอาต์พุตไปที่ FileOutput.txt ที่อยู่ในไดเร็กทอรี E:\Test
แต่มันจะเขียนทับเนื้อหาหากไฟล์นั้นมีอยู่แล้ว เช่นเดียวกับ cmdlet Add-Content เรายังสามารถใช้พารามิเตอร์ -Encoding ได้อีกด้วย Set-Content cmdlet มีประโยชน์เมื่อเราต้องการแทนที่เนื้อหาของไฟล์ที่มีอยู่ เนื่องจากจะเขียนทับเนื้อหาของไฟล์
