Contents

การเขียนสคริปต์ Windows PowerShell คืออะไร?

ลิงค์ด่วน

⭐ ภาพรวมการเขียนสคริปต์ PowerShell

⭐Cmdlets ในรายละเอียด

⭐ อธิบายพารามิเตอร์ PowerShell

⭐การสร้างไปป์ไลน์

⭐ บันทึกไปป์ไลน์เป็นสคริปต์ PS1

⭐PowerShell ยังมีให้บริการบน Linux และ macOS

ประเด็นที่สำคัญ

PowerShell เป็นภาษาสคริปต์ที่หลากหลายและมีประสิทธิภาพ ซึ่งออกแบบมาเพื่ออำนวยความสะดวกให้กับกระบวนการประมวลผลต่างๆ ที่เป็นอัตโนมัติ ทำให้ผู้ใช้มีวิธีที่มีประสิทธิภาพในการปรับปรุงเวิร์กโฟลว์ของตน โดยทำให้ผู้ใช้สามารถรันคำสั่งและดำเนินการภายในสภาพแวดล้อมที่เป็นหนึ่งเดียว

คำสั่ง Powershell หรือที่เรียกว่า cmdlets แต่ละคำสั่งมีฟังก์ชันเอกพจน์ คำสั่ง “Get-Command” ช่วยให้สามารถอ่านอาร์เรย์ของ cmdlets ที่สามารถเข้าถึงได้

PowerShell สามารถใช้ได้กับระบบปฏิบัติการที่หลากหลาย รวมถึง Windows, macOS และ Linux

PowerShell เป็นภาษาสคริปต์อเนกประสงค์ที่ออกแบบมาโดยเฉพาะสำหรับการทำงานด้านคอมพิวเตอร์ต่างๆ โดยอัตโนมัติได้อย่างง่ายดาย มีประสิทธิภาพ และเชื่อถือได้บนระบบที่ใช้ Windows เรียนรู้วิธีควบคุมความสามารถโดยการสร้างสคริปต์ที่ปรับแต่งให้ตรงกับความต้องการเฉพาะของคุณ

ภาพรวมการเขียนสคริปต์ PowerShell

ในการเริ่มสร้างสคริปต์ PowerShell พื้นฐานบนระบบปฏิบัติการ Windows จำเป็นต้องมีความเข้าใจแนวคิดพื้นฐานสามประการ:

⭐ Cmdlets: คำสั่งฟังก์ชันเดียว

พารามิเตอร์ทำหน้าที่ในการอธิบายรายละเอียดเฉพาะเกี่ยวกับการดำเนินการ Cmdlets หรือคำสั่ง รวมถึงวัตถุประสงค์ เวลา สถานที่ และวิธีการ พารามิเตอร์เหล่านี้ให้คำแนะนำที่จำเป็นสำหรับการดำเนินงานในลักษณะที่มีการควบคุมและแม่นยำ

ไปป์ไลน์เป็นคุณสมบัติที่ทรงพลังใน PowerShell ที่ช่วยให้คุณสามารถส่งผ่านเอาต์พุตของคำสั่งหรือฟังก์ชันหนึ่งเป็นอินพุตไปยังอีกคำสั่งหนึ่งได้ ทำให้เกิดโครงสร้างคล้ายลูกโซ่ ด้วยการใช้ฟังก์ชันนี้ คุณสามารถสร้างงานสคริปต์ที่ซับซ้อนได้อย่างง่ายดายโดยการเชื่อมต่อหลายคำสั่งเข้าด้วยกัน ช่วยให้ทำงานอัตโนมัติได้อย่างมีประสิทธิภาพและเวิร์กโฟลว์มีความคล่องตัว

ด้วยการใช้องค์ประกอบทั้งสามนี้ จึงเป็นไปได้ที่จะสร้างสคริปต์ที่ใช้งานง่ายซึ่งปรับปรุงกระบวนการต่างๆ ด้วยระบบอัตโนมัติ

ในตัวอย่างนี้ เราแสดงให้เห็นการรวม PowerShell cmdlets หลายรายการเพื่อให้บรรลุวัตถุประสงค์เฉพาะ ลำดับของคำสั่งเหล่านี้เรียกว่า"ไปป์ไลน์"ซึ่งแต่ละคำสั่งจะประมวลผลข้อมูลและส่งต่อไปยังคำสั่งถัดไปจนกว่าผลลัพธ์ที่ต้องการจะบรรลุผล แนวทางนี้ช่วยให้ผู้ใช้ดำเนินการที่ซับซ้อนได้อย่างมีประสิทธิภาพมากขึ้นโดยปรับปรุงขั้นตอนการทำงานให้มีประสิทธิภาพและลดการแทรกแซงด้วยตนเอง

/th/images/get-potato.jpg

เพื่อดำเนินการลำดับการดำเนินการนี้โดยใช้ PowerShell เราสามารถใช้คำสั่งที่คล้ายกับต่อไปนี้:

 Get-Object Potato | Peel-Object | Chop-Object Chips| Cook-Object DeepFry `
  | Place-Object Bowl 

Cmdlets โดยละเอียด

PowerShell ติดตั้งชุดคำสั่งในตัวที่ช่วยให้ผู้ใช้สามารถจัดการออบเจ็กต์ของระบบและดำเนินการต่างๆ มากมาย คำสั่งหลักเหล่านี้ใน PowerShell เรียกว่า Cmdlets

PowerShell ใช้คำสั่งประเภทเฉพาะที่เรียกว่า cmdlets ซึ่งมีขนาดกะทัดรัดและทำหน้าที่เอกพจน์โดยใช้ส่วนขยาย.dll หน่วยการเขียนโปรแกรมขนาดเล็กเหล่านี้มีคุณลักษณะที่เป็นประโยชน์ในการรวบรวมอย่างกระชับ ส่งผลให้ดำเนินการได้รวดเร็วเมื่อเปรียบเทียบกับฟังก์ชันที่ครอบคลุมมากกว่า

การใช้ PowerShell นำเสนอคำสั่งที่หลากหลาย ครอบคลุมฟังก์ชันการทำงานมากมาย ไม่จำเป็นต้องเชี่ยวชาญทุกคำสั่ง แต่ขอแนะนำให้เริ่มต้นด้วยการได้รับความรู้พื้นฐานและขยายความรู้อย่างต่อเนื่องตลอดทั้งประสบการณ์การเขียนสคริปต์ เพื่อที่จะอ่านคำสั่ง Command Line Interface (CLI) ที่ติดตั้งอยู่ในระบบของคุณในปัจจุบัน ให้ดำเนินการตามคำสั่งต่อไปนี้:

 Get-Command 

เมื่ออ่านผลลัพธ์แล้ว เราสามารถมองเห็นได้ว่าพวกเขาปฏิบัติตามรูปแบบของการสร้างคำกริยา-คำนาม การจัดการดังกล่าวช่วยให้เกิดความเข้าใจในการทำงานของ Cmdlet เฉพาะเจาะจง

Powershell มี cmdlets ในตัวที่หลากหลายสำหรับการทำงานที่แตกต่างกัน คำสั่ง Get-Command ส่งคืนอาร์เรย์ของคำสั่งที่มีอยู่ทั้งหมดใน Powershell ในทำนองเดียวกัน คำสั่ง Get-Process จะดึงข้อมูลเกี่ยวกับกระบวนการที่ทำงานอยู่บนระบบของคุณ นอกจากนี้ Copy-Item cmdlet ยังอนุญาตให้ผู้ใช้ถ่ายโอนไฟล์หนึ่งหรือหลายไฟล์จากที่หนึ่งไปยังโฟลเดอร์ปลายทางอื่นที่ระบุ

เครื่องมือบรรทัดคำสั่งมาพร้อมกับเอกสารประกอบที่ครอบคลุมซึ่งประกอบด้วยตัวอย่างภาพประกอบ แนวทางการใช้งานโดยละเอียด และคำอธิบายเชิงลึกเกี่ยวกับความสามารถของพวกเขา

หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Cmdlet เฉพาะและการใช้งาน การดำเนินการคำสั่งต่อไปนี้จะให้รายละเอียดที่ครอบคลุมแก่คุณ:

 Get-Help <name-of-cmdlet> 

อธิบายพารามิเตอร์ PowerShell แล้ว

คำสั่ง PowerShell อาจถูกดำเนินการโดยมีระดับความจำเพาะที่แตกต่างกันผ่านการใช้พารามิเตอร์ พารามิเตอร์เหล่านี้ช่วยให้สามารถควบคุมการดำเนินการ Cmdlets และฟังก์ชันต่างๆ ได้ดียิ่งขึ้น โดยการระบุปัจจัยต่างๆ เช่น เป้าหมาย เวลา ตำแหน่ง และวิธีการ

ภาพประกอบนี้คือการได้รับรายการกระบวนการที่ใช้งานอยู่ในปัจจุบันภายในระบบปฏิบัติการโดยใช้คำสั่ง"Get-Process

/th/images/get-process-cmdlet.jpg

หากต้องการรับกระบวนการเฉพาะโดยใช้พารามิเตอร์บรรทัดคำสั่ง อาจใช้แอตทริบิวต์"ชื่อ"ร่วมกับ cmdlet"รับกระบวนการ"ตามภาพประกอบ ในการดึงอินสแตนซ์ทั้งหมดของแอปพลิเคชัน Slack ผู้ใช้จะต้องป้อนคำสั่งต่อไปนี้:mathematicaGet-Process-Name “ Slack

 Get-Process -Name Slack 

เมื่อดำเนินการคำสั่ง คุณจะเห็นรายการกระบวนการที่มีป้ายกำกับว่า"slack"

/th/images/get-process-with-parameter.jpg

ตัวแปรบางตัวมีลักษณะที่เรียกว่า"ตำแหน่ง"โดยการกำหนดให้เป็นแบบบังคับหรือแบบเลือกได้นั้นถูกกำหนดโดยบริบทมากกว่าด้วยป้ายกำกับที่ชัดเจน ตัวอย่างเช่น เมื่อเรียกใช้คำสั่ง Get-Process-Name Slack การละเว้นชื่อของพารามิเตอร์จะส่งผลให้รวมเป็นตำแหน่ง ดังนั้นจึงทำให้สามารถเข้าใจได้ภายในบริบทที่กำหนดโดยไม่จำเป็นต้องใช้ป้ายกำกับเฉพาะ ในทำนองเดียวกัน เมื่อดำเนินการคำสั่ง Get-Process Slack การขาดข้อกำหนดสำหรับพารามิเตอร์ยังทำให้พารามิเตอร์มีตำแหน่ง ทำให้สามารถเข้าใจในสถานการณ์โดยรอบโดยไม่ต้องใช้ตัวระบุอย่างเป็นทางการ

แต่ละ Commandlet มีชุดพารามิเตอร์อินพุตที่ยอมรับได้ของตัวเอง ซึ่งสามารถดูได้โดยใช้คำสั่ง Get-Help และนำทางไปยังส่วนไวยากรณ์สำหรับ Commandlet เฉพาะนั้น

 Get-Help Get-Process 

คุณจะพบอาร์เรย์ของวิธีการที่ใช้ได้สำหรับการดำเนินการคำสั่งที่ระบุ ซึ่งรวมถึงพารามิเตอร์และตัวเลือกต่างๆ

/th/images/cmdlet-syntax-parameters.jpg

ในกรณีนี้ Get-Process cmdlet สามารถรับพารามิเตอร์อินพุตที่หลากหลาย รวมถึงแต่ไม่จำกัดเพียง ชื่อ, Id, ชื่อคอมพิวเตอร์, โมดูล และ FileVersionInfo และอื่นๆ อีกมากมาย พารามิเตอร์เหล่านี้แสดงถึงคุณลักษณะต่างๆ ที่สามารถใช้ร่วมกับ Get-Process cmdlet เพื่อดึงข้อมูลเกี่ยวกับกระบวนการที่ทำงานบนระบบคอมพิวเตอร์

เครื่องหมาย

|

ชื่อ

|

ความหมาย

—|—|— |

ว่างเปล่า

|

พารามิเตอร์ไม่ยอมรับอินพุต

-

|

ยัติภังค์

|

ระบุชื่อพารามิเตอร์

|

วงเล็บเหลี่ยม

|

ตัวยึดตำแหน่งสำหรับข้อความ

[]

|

วงเล็บ

|

พารามิเตอร์ที่สามารถรองรับหลายค่า ซึ่งมักเรียกว่าตัวแปรหรือฟิลด์ แสดงถึงองค์ประกอบที่อาจมีการเปลี่ยนแปลงระหว่างการทำงานของโปรแกรม และอาจมีผลกระทบต่อเอาต์พุตหรือลักษณะการทำงาน

{}

|

เหล็กจัดฟัน

|

พารามิเตอร์ยอมรับชุดของค่า

พารามิเตอร์บางตัวจะระบุประเภทอินพุตที่คาดหวัง รวมถึงสตริง จำนวนเต็ม บูลีน และวันที่ เพื่อแสดงให้เห็น ให้พิจารณาข้อมูลโค้ดต่อไปนี้:

 Get-Process [[-Name] <string[]>] 

พารามิเตอร์ Name สามารถรองรับค่าสตริงได้หลายค่า ในทางตรงกันข้าม ข้อจำกัดที่กล่าวมาข้างต้นจำกัดให้ยอมรับเฉพาะค่าเดียวเท่านั้น

 Get-Process -Id <int[]> 

พารามิเตอร์ “Id” ได้รับการออกแบบมาเพื่อยอมรับค่าจำนวนเต็มตั้งแต่หนึ่งค่าขึ้นไป ซึ่งสามารถใช้เพื่อวัตถุประสงค์ต่างๆ ในการเขียนโปรแกรมแอปพลิเคชัน

เพื่อปรับแต่งการค้นหากระบวนการเพิ่มเติมและรับชุดผลลัพธ์ที่แม่นยำยิ่งขึ้น เราสามารถใช้พารามิเตอร์ “ID” ภายในคำสั่ง PowerShell “Get-Process” พารามิเตอร์เฉพาะนี้จำเป็นต้องป้อนข้อมูลของค่าจำนวนเต็ม ตามที่ระบุไว้ในไวยากรณ์ ด้วยการรวมพารามิเตอร์นี้เข้ากับคำสั่ง ผู้ใช้สามารถระบุกระบวนการที่แม่นยำยิ่งขึ้นในรายการตัวเลือกที่มีอยู่

 Get-Process -Id 3016 

ต่อมา คุณจะสังเกตเห็นอินสแตนซ์เดียวภายในการแจงนับ:

/th/images/using-id-parameter.jpg

การสร้างไปป์ไลน์

PowerShell ประมวลผลข้อมูลเป็นเอนทิตี ซึ่งจัดระเบียบผ่านชุดคำสั่งหรือฟังก์ชันที่เชื่อมต่อถึงกันโดยใช้สัญลักษณ์ไปป์ (|) การเลือก Commandlet ที่เหมาะสมและการจัดเรียง Commandlet ในลักษณะที่สอดคล้องกันโดยใช้ไปป์ไลน์มีบทบาทสำคัญในการสร้างสคริปต์ที่มีประสิทธิภาพ

นี่คือตัวอย่างวิธีที่คุณสามารถสร้างสคริปต์ง่ายๆ ที่เรียงลำดับและแสดงไฟล์ที่ใหญ่ที่สุด 5 อันดับแรกในไดเร็กทอรีที่กำหนดตามขนาด โดยใช้ Python:pythonimport osimport shutildef get_largest_files(directory):# Get list of all files in the directoryfile_list=os.listdir(directory)# จัดเรียงรายการตามขนาดไฟล์ (เป็นไบต์) sorted_by_size=sorted(file_list, key=os.path.getsize, Reverse=True)# ส่งคืนเฉพาะองค์ประกอบ n แรกของรายการที่เรียงลำดับแล้วส่งคืน sorted_by_size[:5 ]# ตัวอย่างการใช้งาน:directory=’/path/to/your/folder/’top_

/th/images/sort-largefiles-script.jpg

เราสามารถใช้การกำหนดค่าไปป์ไลน์ใน PowerShell ซึ่งแสดงโครงสร้างเฉพาะเพื่อให้งานนี้สำเร็จ ไปป์ไลน์ดังกล่าวประกอบด้วยส่วนประกอบต่าง ๆ ที่ทำงานร่วมกันเพื่อให้บรรลุผลลัพธ์ที่ต้องการ

 Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize 

บันทึกไปป์ไลน์เป็นสคริปต์ PS1

เพื่อให้มั่นใจถึงประสิทธิภาพและความสะดวกในการเข้าถึง คุณอาจต้องการอนุรักษ์ไปป์ไลน์การปฏิบัติงานของคุณโดยแปลงเป็นไฟล์ PowerShell Script (.ps1) เพื่อการใช้งานในอนาคต วิธีนี้จะช่วยลดความจำเป็นในการป้อนข้อมูลด้วยตนเองซ้ำๆ ทุกครั้งที่ใช้งานไปป์ไลน์

วิธีการหนึ่งที่ตรงไปตรงมาในการสร้างไฟล์สคริปต์ PowerShell (PS1) คือการวางสคริปต์ที่ต้องการลงในโปรแกรมแก้ไขข้อความโดยตรง เช่น Notepad จากนั้นบันทึกโดยใช้นามสกุลไฟล์ “.ps1”

/th/images/creating-script-with-notepad.jpg

หากต้องการใช้สคริปต์ PS1 ใน PowerShell ให้ดำเนินการคำสั่ง ./ScriptName.ps1 ตามด้วยเครื่องหมายโคลอน

/th/images/using-ps1-script.jpg

เพื่อแก้ไขปัญหาสิทธิ์ใดๆ ที่อาจเกิดขึ้นขณะเรียกใช้สคริปต์ของคุณ ขอแนะนำให้เรียกใช้ PowerShell ด้วยสิทธิ์ระดับผู้ดูแลระบบ ซึ่งสามารถทำได้โดยการเริ่มต้นเซสชัน PowerShell ที่ยกระดับ จากนั้นดำเนินการเรียกใช้สคริปต์ของคุณภายในบริบทนี้

ยินดีด้วย ตอนนี้คุณสามารถสร้างสคริปต์ PowerShell PS1 ได้แล้ว

##PowerShell พร้อมใช้งานบน Linux และ macOS ด้วย

PowerShell ได้กลายเป็นภาษาสคริปต์สำหรับผู้เริ่มต้นที่เป็นที่ต้องการอย่างมาก เนื่องจากมีอินเทอร์เฟซที่เป็นมิตรต่อผู้ใช้และความสามารถที่กว้างขวาง ก่อนหน้านี้เป็นเอกสิทธิ์ของระบบนิเวศของ Windows; อย่างไรก็ตาม การอัปเดตล่าสุดได้เปิดใช้งานความพร้อมใช้งานของ PowerShell บนแพลตฟอร์มต่างๆ เช่น macOS และ Linux หลายรุ่น ส่วนขยายนี้ช่วยเพิ่มความสามารถรอบด้านของ PowerShell ให้ดียิ่งขึ้น โดยช่วยให้ผู้ใช้เปลี่ยนทักษะระหว่างระบบปฏิบัติการต่างๆ ได้อย่างราบรื่น