คำชี้แจงสวิตช์ PowerShell: คู่มือสำหรับผู้เริ่มต้น!
คำสั่ง switch ช่วยให้คุณสามารถระบุชุดเงื่อนไขเพื่อทดสอบและดำเนินการชุดรหัสที่แตกต่างกันสำหรับแต่ละเงื่อนไข สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณต้องการดำเนินการที่แตกต่างกันโดยอิงจากข้อมูลที่ต่างกัน คำสั่ง switch ใน PowerShell คล้ายกับคำสั่ง switch ในภาษาการเขียนโปรแกรมอื่น ใช้นิพจน์เป็นอินพุต จากนั้นเปรียบเทียบค่าของนิพจน์กับรายการเคส หากพบรายการที่ตรงกัน บล็อกโค้ดที่เกี่ยวข้องกับกรณีนั้นจะถูกดำเนินการ หากไม่พบรายการที่ตรงกัน สามารถใช้ตัวพิมพ์เริ่มต้นที่เป็นทางเลือกเพื่อดำเนินการบล็อกโค้ดได้ ไม่ว่าคุณจะเป็นมือใหม่หรือผู้ใช้ PowerShell ที่มีประสบการณ์ คู่มือนี้จะช่วยให้คุณเชี่ยวชาญคำสั่ง Switch และใช้ประโยชน์จากความสามารถในสคริปต์ของคุณ
เรามาดูภาพรวมว่าคำสั่งสวิตช์ PowerShell คืออะไรและทำงานอย่างไร รวมถึงตัวอย่างวิธีการใช้ในสคริปต์ PowerShell ของคุณ ไวยากรณ์สำหรับการใช้คำสั่ง switch ค่อนข้างตรงไปตรงมา เริ่มต้นด้วยคีย์เวิร์ด “switch” ตามด้วยนิพจน์ในวงเล็บที่มีค่าที่คุณต้องการเปรียบเทียบ จากนั้น แต่ละเงื่อนไขจะได้รับการประเมินตามลำดับจนกว่าเงื่อนไขใดเงื่อนไขหนึ่งจะตรงกับค่านิพจน์ และบล็อกโค้ดที่เกี่ยวข้องจะดำเนินการ หากไม่มีเงื่อนไขใดที่ตรงเลย ก็สามารถใช้บล็อกโค้ด "เริ่มต้น" เสริมแทนได้
ไวยากรณ์ของคำสั่ง switch ใน PowerShell
มาดูไวยากรณ์ของคำสั่ง switch ใน PowerShell กันดีกว่า
การแสดงออก
นิพจน์ในคำสั่ง switch อาจเป็นนิพจน์ PowerShell ที่ถูกต้องใดๆ ก็ได้ ซึ่งอาจรวมถึงตัวแปร ผลลัพธ์ cmdlet หรือนิพจน์ PowerShell อื่นๆ
ค่านิยม
ค่าในคำสั่ง switch อาจเป็นนิพจน์ PowerShell ที่ถูกต้องใดๆ ที่ประเมินเป็นค่าคงที่ ซึ่งอาจรวมถึงสตริง ตัวเลข หรือค่าคงที่อื่นๆ
บล็อกรหัส
บล็อกโค้ดในคำสั่ง switch คือบรรทัดของโค้ด PowerShell ที่จะดำเนินการเมื่อนิพจน์ตรงกับค่าที่เกี่ยวข้อง แต่ละบล็อกโค้ดจะต้องอยู่ในวงเล็บปีกกา {}
ไวยากรณ์พื้นฐานของคำสั่ง switch case ใน PowerShell เป็นดังนี้:
switch (expression)
{
value1 {code block}
value2 {code block}
value3 {code block}
default {code block}
}
บล็อกเริ่มต้นของสวิตช์ PowerShell
กรณีเริ่มต้นในคำสั่ง switch ใช้เพื่อจัดการกับสถานการณ์ที่ไม่มีกรณีใดตรงกับนิพจน์ที่ได้รับการประเมิน โดยจะทำหน้าที่เป็นตัวเลือกทางเลือกเมื่อไม่จำเป็นต้องดำเนินการใดๆ กับค่าที่ไม่ตรงกัน
พารามิเตอร์สวิตช์ PowerShell
ใน PowerShell คำสั่ง Switch ช่วยให้คุณสามารถระบุการดำเนินการต่างๆ ที่จะดำเนินการตามค่าที่แตกต่างกันของนิพจน์หรือตัวแปรเดียว คำสั่ง Switch มีพารามิเตอร์หลายตัวที่คุณสามารถใช้เพื่อปรับแต่งลักษณะการทำงานได้
นี่คือรายการพารามิเตอร์บางตัวที่คุณสามารถใช้กับคำสั่ง Switch:
-Regex: พารามิเตอร์นี้อนุญาตให้คุณใช้นิพจน์ทั่วไปเพื่อจับคู่รูปแบบในค่าที่กำลังเปรียบเทียบ-Wildcard: พารามิเตอร์นี้อนุญาตให้คุณใช้อักขระตัวแทน (เช่น*และ?) เพื่อจับคู่รูปแบบในค่าที่จะเปรียบเทียบ-Exact: พารามิเตอร์นี้ระบุว่าค่าที่จะเปรียบเทียบควรตรงกันทุกประการ โดยไม่มีการจับคู่ไวด์การ์ดหรือ regex-CaseSensitive: พารามิเตอร์นี้ระบุว่าค่าที่จะเปรียบเทียบควรจับคู่ในลักษณะที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่-File: พารามิเตอร์นี้ระบุไฟล์ที่มีรายการค่าที่จะจับคู่ แต่ละค่าในไฟล์ควรอยู่ในบรรทัดแยกกัน
ตัวอย่างสวิตช์ PowerShell
คำสั่ง switch นั้นคล้ายคลึงกับคำสั่ง if แต่อนุญาตให้คุณทดสอบหลายเงื่อนไขและดำเนินการบล็อคโค้ดที่แตกต่างกันสำหรับแต่ละเงื่อนไข คำสั่ง Switch สามารถใช้กับข้อมูลประเภทใดก็ได้ แต่มักใช้กับข้อมูลสตริง เพื่อแสดงให้เห็นการใช้สวิตช์ PowerShell ลองพิจารณาตัวอย่างง่ายๆ ที่เรากำหนดวันในสัปดาห์ตามค่าตัวเลข นี่คือรหัส:
$day = Read-Host "Enter the Day number (1-7):"
switch ($day) {
1 { Write-Host "It's Monday." }
2 { Write-Host "It's Tuesday." }
3 { Write-Host "It's Wednesday." }
4 { Write-Host "It's Thursday." }
5 { Write-Host "It's Friday." }
6 { Write-Host "It's Saturday." }
7 { Write-Host "It's Sunday." }
default { Write-Host "Invalid input. Please enter a number between 1 and 7." }
}
ในตัวอย่างนี้ ผู้ใช้จะได้รับแจ้งให้ป้อนตัวเลขระหว่าง 1 ถึง 7 คำสั่ง switch จะประเมินค่าอินพุตและแสดงวันที่สอดคล้องกันในสัปดาห์ หากมีการระบุอินพุตที่ไม่ถูกต้อง กรณีเริ่มต้นจะถูกดำเนินการและข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น
นี่คือตัวอย่างของคำสั่ง switch ธรรมดาที่มีค่าที่กำหนดไว้ล่วงหน้าใน PowerShell:
$value = "apple"
switch ($value) {
"apple" {
Write-Host "The value is an apple"
}
"banana" {
Write-Host "The value is a banana"
}
default {
Write-Host "The value is something else"
}
}
#Output: The value is an apple
ในตัวอย่างนี้ ค่าของตัวแปร $value ถูกตั้งค่าเป็น “apple” จากนั้นคำสั่ง switch จะเปรียบเทียบค่าของ $value กับกรณี “apple” และ “banana” เนื่องจากค่าของ $value คือ “apple” บล็อกโค้ดที่เกี่ยวข้องกับตัวพิมพ์ “apple” จึงถูกดำเนินการ และผลลัพธ์จะเป็น “The value is an apple”
การเปรียบเทียบค่ากับคำสั่ง Switch
นอกจากการทดสอบกับค่าเดียวแล้ว คำสั่ง Switch ยังสามารถเปรียบเทียบค่าตัวเลขได้อีกด้วย ซึ่งจะทำให้คุณสามารถดำเนินการต่างๆ ตามช่วงของค่าที่แตกต่างกันได้ ต่อไปนี้คือวิธีที่คุณสามารถตรวจสอบการป้อนข้อมูลของผู้ใช้ด้วยเงื่อนไขต่างๆ โดยใช้คำสั่ง Switch
$input = 10
Switch ($input) {
{ $_ -lt 10 } {
Write-Host "The value is less than 10."
}
{ $_ -ge 10 -and $_ -lt 20 } {
Write-Host "The value is between 10 and 20."
}
{ $_ -ge 20 -and $_ -lt 30 } {
Write-Host "The value is between 20 and 30."
}
{ $_ -ge 30 } {
Write-Host "The value is greater than or equal to 30."
}
default {
Write-Host "The number is not valid" -f Red
}
}
ในตัวอย่างนี้ ตัวแปร $input ถูกตั้งค่าเป็น 10 คำสั่ง Switch จะเปรียบเทียบค่านี้กับแต่ละเงื่อนไขในบล็อกสวิตช์ เงื่อนไขแรกจะทดสอบว่าค่าน้อยกว่า 10 หรือไม่ เงื่อนไขที่สองจะทดสอบว่าค่าอยู่ระหว่าง 10 ถึง 20 หรือไม่ เงื่อนไขที่สามจะทดสอบว่าค่าอยู่ระหว่าง 20 ถึง 30 หรือไม่ และเงื่อนไขที่สี่จะทดสอบว่าค่ามากกว่าหรือ เท่ากับ 30 นอกจากนี้เรายังมีบล็อกเริ่มต้นที่จะจับคู่กับค่าอื่นๆ
คำสั่งสวิตช์ PowerShell พร้อมไวด์การ์ด
คุณยังสามารถใช้รูปแบบไวด์การ์ดในกรณี switch ของคุณเพื่อจับคู่ค่าหลายค่าได้ ตัวอย่างเช่น:
$value = "orange"
switch -wildcard ($value) {
"a*" {
Write-Host "The value starts with the letter 'a'"
}
"b*" {
Write-Host "The value starts with the letter 'b'"
}
"*e" {
Write-Host "The value ends with the letter 'e'"
}
default {
Write-Host "The value does not match any patterns"
}
}
ในตัวอย่างนี้ ค่าของ $value ถูกตั้งค่าเป็น “orange” คำสั่ง switch จะเปรียบเทียบค่าของ $value กับกรณีที่ใช้รูปแบบสตริงสัญลักษณ์แทน เนื่องจากค่าของ $value ลงท้ายด้วยตัวอักษร “e” บล็อกโค้ดที่เกี่ยวข้องกับตัวพิมพ์ “*e” จึงถูกดำเนินการ และผลลัพธ์จะเป็น “ค่าที่ลงท้ายด้วยตัวอักษร 'e' ".
คำสั่ง switch ใน PowerShell ยังมีพารามิเตอร์เพิ่มเติมหลายประการที่สามารถทำให้มีประสิทธิภาพและยืดหยุ่นมากยิ่งขึ้น เช่น. -CaseSensitive -Exact -Parallel -Wildcard ฯลฯ
สลับคำสั่งเพื่อค้นหาเนื้อหาในไฟล์
คุณสามารถใช้พารามิเตอร์ -File ของคำสั่ง switch เพื่อค้นหาคำหลักที่ต้องการในไฟล์ข้อความ นี่คือตัวอย่าง:
Switch -File "C:\Logs\AppLog.txt" {
{$_ -match "Error"} {
Write-Host "The log file contains Errors"
}
{$_ -match "warning"} {
Write-Host "The log file contains Warnings"
}
{$_ -match "information"} {
Write-Host "The log file contains information"
}
default {
Write-Host -f Yellow "The log file does not contain any specific keywords!"
}
}
สคริปต์นี้จะวนซ้ำแต่ละบรรทัดของไฟล์ข้อความที่กำหนด และส่วนคำสั่งการจับคู่จะตรวจสอบว่าบรรทัดนั้นตรงกับคีย์เวิร์ดที่กำหนดหรือไม่
สลับกับตัวอย่าง RegEx
ตัวเลือกหนึ่งคือพารามิเตอร์ -regex ซึ่งช่วยให้คุณสามารถใช้นิพจน์ทั่วไปเพื่อจับคู่ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในคำสั่ง switch ของคุณ ตัวอย่างเช่น:
#$value = "123-456-7890"
$value = "Salaudeen@crescent.com"
switch -regex ($value) {
"\d{3}-\d{3}-\d{4}" {
Write-Host "The value is a phone number"
}
"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" {
Write-Host "The value is an email address"
}
default {
Write-Host "The value does not match any patterns"
}
}
ในตัวอย่างนี้ ค่าของ $value ถูกตั้งค่าเป็นหมายเลขโทรศัพท์ คำสั่ง switch จะเปรียบเทียบค่าของ $value กับกรณีต่างๆ โดยใช้นิพจน์ทั่วไป เนื่องจากค่าของ $value ตรงกับนิพจน์ทั่วไปสำหรับหมายเลขโทรศัพท์ บล็อกโค้ดที่เกี่ยวข้องกับกรณีนั้นจึงถูกดำเนินการ และผลลัพธ์จะเป็น "ค่าคือหมายเลขโทรศัพท์"
PowerShell สลับหลายค่า (อาร์เรย์)
คุณสามารถใช้คำสั่ง Switch เพื่อดำเนินการต่างๆ โดยยึดตามค่าที่แตกต่างกันของนิพจน์หรือตัวแปรเดียว หากต้องการระบุค่าหลายค่าที่ควรดำเนินการอย่างใดอย่างหนึ่ง คุณสามารถใช้รายการค่าที่คั่นด้วยเครื่องหมายจุลภาคภายในเครื่องหมายปีกกาของคำสั่ง Switch
นี่คือตัวอย่างวิธีที่คุณสามารถใช้คำสั่ง Switch ที่มีค่าหลายค่า:
$value = 1, 2
Switch ($value) {
1 { Write-Host "The Value contains 1" }
2 { Write-Host "The Value contains 2" }
3 { Write-Host "The Value contains 3" }
default { Write-Host "Value is something else" }
}
สคริปต์ด้านบนส่งค่าอาร์เรย์เพื่อสลับ สคริปต์นี้จะส่งออก "ค่าประกอบด้วย 1" และ "ค่าประกอบด้วย 2" ลองดูอีกตัวอย่างหนึ่งกับอาร์เรย์สตริง:
$Fruits = "apple", "orange", "banana"
Switch ($fruits) {
"apple" {
Write-Host "We have an apple."
}
"orange" {
Write-Host "We have an orange."
}
"banana" {
Write-Host "We have a banana."
}
default {
Write-Host "The fruit is not recognized."
}
}
ในตัวอย่างนี้ ตัวแปร $fruits มีอาร์เรย์ของผลไม้ คำสั่ง Switch จะเปรียบเทียบแต่ละค่าในอาร์เรย์กับแต่ละกรณีในบล็อกสวิตช์ เนื่องจากอาร์เรย์มีค่า "apple", "orange" และ "banana" การดำเนินการที่สอดคล้องกัน "We have an apple", "We have an orange" และ "We have a Banana" จึงถูกดำเนินการ ผลลัพธ์ของสคริปต์นี้จะเป็น:
We have an apple.
We have an orange.
We have a banana.
สลับคำสั่งด้วย "break" ใน PowerShell:
ใน PowerShell คุณสามารถใช้คีย์เวิร์ด break เพื่อออกจากลูปได้ ในบริบทของสวิตช์ ใช้เพื่อแยกและออกจากคำสั่งสวิตช์ตั้งแต่เนิ่นๆ เมื่อพบคำสั่งแบ่งภายในคำสั่ง switch คำสั่งดังกล่าวจะออกจากสวิตช์ทันทีและดำเนินการต่อไปในคำสั่งถัดไปหลังจากสวิตช์ นี่คือตัวอย่างวิธีที่คุณสามารถใช้คำสั่ง break ภายในคำสั่ง Switch ใน PowerShell เพื่อหยุดในนัดแรก:
$value = 1, 2
$Result = Switch ($value) {
1 { Write-Host "The Value contains 1"; break }
2 { Write-Host "The Value contains 2"; break }
3 { Write-Host "The Value contains 3"; break }
default { Write-Host "Value is something else" }
}
#Get the Result
$Result
ซึ่งจะส่งผลให้ "ค่ามี 1" เพียงอย่างเดียว ตัวแบ่งเพียงทำให้รายการปัจจุบันสมบูรณ์ หยุดการประมวลผลทั้งหมด และออกจากคำสั่ง switch
สวิตช์ PowerShell พร้อมเงื่อนไขหลายข้อ
ในทำนองเดียวกัน คุณสามารถใช้คำสั่ง switch กับหลายเงื่อนไขได้ เช่น
$value = 4
Switch ($value) {
1 { Write-Host "Value is 1" }
2 { Write-Host "Value is 2" }
{($_ -eq 3) -or ($_ -eq 4) -or ($_ -eq 5)} {"It is 3, 4, or 5."}
default { Write-Host "Value is something else" }
}
เวอร์ชันที่สั้นกว่าสำหรับหลายกรณีจะเป็น:
$value = 5
Switch ($value) {
1 { Write-Host "Value is 1" }
2 { Write-Host "Value is 2" }
{3, 4, 5) } {"It is 3, 4, or 5."}
default { Write-Host "Value is something else" }
}
ในตัวอย่างนี้ คำสั่ง Switch จะตรวจสอบค่าของตัวแปร $value หากค่าของ $value คือ 1 มันจะแสดงผลเป็น “Value is 1” หากค่าเป็น 2 ก็จะแสดงผลเป็น “Value is 2” ในกรณีที่ค่าเป็น 3, 4 หรือ 5 มันจะส่งออก “ค่าคือ 3, 4 หรือ 5” หากไม่มีค่าใดเลย ระบบจะแสดงผลลัพธ์เป็น "มูลค่าเป็นอย่างอื่น"
ความอ่อนไหวของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในคำสั่ง Switch
สุดท้าย: พารามิเตอร์ของสวิตช์ไม่คำนึงถึงขนาดตัวพิมพ์โดยค่าเริ่มต้น ซึ่งหมายความว่าจะจับคู่ค่าสตริงโดยไม่คำนึงถึงตัวพิมพ์ กล่าวอีกนัยหนึ่งตัวพิมพ์เล็กเท่ากับตัวพิมพ์ใหญ่! อย่างไรก็ตาม คุณสามารถเปลี่ยนลักษณะการทำงานนี้ และทำให้คำสั่ง Switch คำนึงถึงขนาดตัวพิมพ์ได้โดยใช้พารามิเตอร์ -CaseSensitive
ใช้พารามิเตอร์ CaseSensitive เพื่อดำเนินการจับคู่ค่าทดสอบโดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ เช่น.,
switch -casesensitive ("Banana") {
"banana" { "Given Value is $_"; break }
"mango" { "Given Value is $_"; break }
"Banana" { "Given Value is $_"; break }
default { "Some other fruit fruit" }
}
ในตัวอย่างนี้ ค่าที่กำหนดถูกตั้งค่าเป็น "Banana" ด้วยการใช้พารามิเตอร์ -CaseSensitive เราทำให้คำสั่ง Switch คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งหมายความว่าจะจับคู่เฉพาะกรณี "Banana" เท่านั้น ไม่ใช่ "Banana"
สวิตช์ PowerShell กับคำสั่ง if - ไหนดีกว่ากัน?
เมื่อตัดสินใจระหว่างคำสั่ง switch และคำสั่ง if สิ่งสำคัญคือต้องพิจารณาความซับซ้อนของเงื่อนไขที่คุณต้องประเมิน ต่อไปนี้เป็นประเด็นที่ควรพิจารณา:
ดังนั้น โดยทั่วไป หากคุณกำลังทดสอบตัวแปรตัวเดียวกับค่าต่างๆ มากมาย switch อาจเป็นตัวเลือกที่ดีกว่า หากคุณกำลังทดสอบตัวแปรหลายตัว หรือมีเงื่อนไขทางตรรกะที่ซับซ้อนมากขึ้น “ถ้า” อาจเป็นทางเลือกที่ดีกว่า มันขึ้นอยู่กับกรณีการใช้งานเฉพาะจริงๆ
- ความซับซ้อนของเงื่อนไข: หากมีหลายเงื่อนไขที่ต้องตรวจสอบหรือเงื่อนไขขึ้นอยู่กับค่าที่แตกต่างกันหลายค่าของตัวแปรตัวเดียว คำสั่ง switch จะสามารถอ่านได้ง่ายกว่าและจัดการได้ง่ายกว่าคำสั่ง if คำสั่ง Switch ได้รับการออกแบบมาเพื่อจัดการกับค่าหลายค่าอย่างสวยงาม โดยเฉพาะในกรณีที่มีเงื่อนไขที่ต้องตรวจสอบมากกว่าสองเงื่อนไข
- ประสิทธิภาพ: คำสั่ง Switch อาจเร็วขึ้นเมื่อมีเงื่อนไขหลายประการ เนื่องจากสวิตช์ใช้แฮชเทเบิ้ลในการจับคู่ ซึ่งอาจส่งผลให้ประสิทธิภาพเพิ่มขึ้นเมื่อต้องรับมือกับเงื่อนไขจำนวนมาก
- การจัดการกรณีเริ่มต้น: คำสั่ง Switch ให้วิธีง่ายๆ ในการจัดการกรณีเริ่มต้น เมื่อไม่ตรงตามเงื่อนไขที่ระบุโดยใช้ค่าเริ่มต้น
- ตรรกะที่ซับซ้อน: ในทางกลับกัน หากคำสั่งดีกว่าสำหรับตรรกะที่ซับซ้อนมากขึ้น โดยที่คุณอาจต้องตรวจสอบตัวแปรหรือเงื่อนไขต่างๆ หลายรายการพร้อมกัน หรือเมื่อเงื่อนไขเกี่ยวข้องกับตัวดำเนินการเชิงตรรกะ (เช่น && และ | |)
- ความสามารถในการอ่าน: สำหรับเงื่อนไขง่ายๆ หากคำสั่งสามารถตรงไปตรงมาและเข้าใจง่ายกว่า โดยเฉพาะสำหรับผู้ที่เพิ่งเริ่มเขียนโปรแกรม
- ความยืดหยุ่น: หากข้อความเสนอความยืดหยุ่นมากขึ้นสำหรับเงื่อนไขที่เกี่ยวข้องกับช่วง หรือเงื่อนไขที่ไม่สามารถแสดงเป็นรายการค่าอย่างง่ายได้
ห่อ
การเรียนรู้สวิตช์ PowerShell เป็นทักษะที่สำคัญสำหรับสคริปต์ PowerShell โดยมอบวิธีที่ยืดหยุ่นและมีประสิทธิภาพในการจัดการตรรกะการแตกสาขาที่ซับซ้อนตามเงื่อนไขที่แตกต่างกัน มีตัวเลือกและคุณลักษณะอื่นๆ มากมายสำหรับคำสั่ง switch ใน PowerShell รวมถึงความสามารถในการระบุค่าหลายค่าสำหรับเคส ความสามารถในการใช้คำสั่ง case เพื่อระบุความซับซ้อนมากขึ้น เงื่อนไขและความสามารถในการใช้คำสั่ง break เพื่อออกจากบล็อก switch ก่อนกำหนด มันคล้ายกับบล็อก if/else แต่มีประโยชน์เพิ่มเติมบางประการ ตัวอย่างเช่น สามารถใช้ประเมินหลายเงื่อนไขพร้อมกันได้โดยไม่จำเป็นต้องซ้อนคำสั่ง if/else ไว้ภายในกัน
โดยรวมแล้ว คำสั่ง switch เป็นเครื่องมือที่มีประสิทธิภาพและยืดหยุ่นสำหรับการควบคุมโฟลว์ของสคริปต์ PowerShell และทำให้งานอัตโนมัติตามค่าและเงื่อนไขที่แตกต่างกัน เป็นส่วนสำคัญของภาษา PowerShell และเป็นคุณลักษณะสำคัญสำหรับทุกคนที่ทำงานกับ PowerShell

