หลายๆ คนชอบใช้PowerShellเพราะช่วยให้ทำสิ่งที่ไม่สามารถทำได้ด้วย Windows GUI ถึงกระนั้น ก็ไม่อาจปฏิเสธได้ว่าPowerShell cmdlets บางตัว อาจดูน่าเบื่อหรือซับซ้อนเล็กน้อย แต่จะเกิดอะไรขึ้นถ้ามีวิธีแก้ไข cmdlets เหล่านี้และทำให้พวกเขา “ประพฤติตัว” ตามที่คุณต้องการล่ะ? เชื่อหรือไม่ว่ามีวิธีง่ายๆ ในการทำเช่นนั้น คุณสามารถเปลี่ยนลักษณะการทำงานของ cmdlet ได้โดยการแก้ไขค่าของพารามิเตอร์เริ่มต้นของ PowerShell บทความนี้จะแสดงวิธีใช้พารามิเตอร์เริ่มต้นของ PowerShell เพื่อเปลี่ยนลักษณะการทำงานของคำสั่ง cmdlet
คำเตือน
ก่อนที่คุณจะเริ่มต้น มีบางสิ่งที่คุณต้องจำไว้ แม้ว่าการเปลี่ยนพารามิเตอร์เริ่มต้นของ PowerShell และลักษณะการทำงาน cmdelt จะสะดวก แต่ก็อาจทำให้เกิดปัญหาได้ หากคุณเรียกใช้สคริปต์และสคริปต์นั้นถือว่า cmdlet ที่แก้ไขแล้วจะทำงานในลักษณะใดลักษณะหนึ่ง คุณอาจได้รับผลลัพธ์ที่คาดเดาไม่ได้ ดังนั้น คุณควรตรวจสอบให้แน่ใจว่าได้เปลี่ยนพารามิเตอร์เริ่มต้นของ PowerShell อย่างระมัดระวัง
รีวิวด่วน
มีแนวคิด PowerShell สองแนวคิดที่คุณต้องคุ้นเคยเพื่อให้สามารถทำงานกับพารามิเตอร์เริ่มต้นได้ แนวคิดแรกคือตัวแปร ใน PowerShell ชื่อตัวแปรจะเริ่มต้นด้วยเครื่องหมายดอลลาร์เสมอ และคุณสามารถเขียนเนื้อหาของตัวแปรได้โดยการพิมพ์ชื่อตัวแปร
แนวคิดที่สองที่คุณอาจคุ้นเคยคือตารางแฮช ตารางแฮชนั้นเป็นรายการที่ประกอบด้วยคู่คีย์/ค่า ตัวอย่างเช่น สมมติว่าคุณต้องการสร้างตารางแฮชที่มีชื่อรัฐของสหรัฐอเมริกาและตัวย่อ ด้านล่างเป็นรหัส:
$StateList = @{}
$StateList.add('ฟลอริดา','FL')
$StateList.add('เซาท์แคโรไลนา','SC')
$StateList.add('จอร์เจีย','GA')
$StateList
บรรทัดแรกของโค้ดจะสร้างตารางแฮชว่างที่เรียกว่า$ StateList สามบรรทัดถัดไปจะเพิ่มรายการลงในตาราง แต่ละรายการประกอบด้วยคีย์ (ชื่อรัฐ) และค่า (ตัวย่อของรัฐ) บรรทัดสุดท้ายแสดงรายการเนื้อหาของตาราง คุณสามารถดูโค้ดที่ใช้งานจริงได้ในภาพด้านล่าง
นี่เป็นเพียงตัวอย่างง่ายๆ และมีวิธีอื่นๆ มากมายในการใช้ตารางแฮช
ทำงานกับพารามิเตอร์เริ่มต้นของ PowerShell
PowerShell มีตัวแปรในตัวที่ใช้เพื่อจัดเก็บพารามิเตอร์เริ่มต้นที่ใช้กับ cmdlets ตัวแปรนี้เรียกว่า$ PSDefaultParameterValues ดังที่คุณอาจสังเกตได้จากการแนะนำเบื้องต้นและชื่อของตัวแปร นี่ไม่ใช่ตัวแปรธรรมดา แต่เป็นตารางแฮช อย่างไรก็ตาม หากคุณป้อนชื่อตัวแปรลงใน PowerShell คุณจะเห็นอย่างรวดเร็วว่าตารางว่างเปล่า ดังที่แสดงด้านล่าง
แล้วเราจะทำอะไรกับ ตัวแปร $PSDefaultParameterValues นี้ ได้ บ้าง ตามที่กล่าวไว้ข้างต้น คุณสามารถควบคุมลักษณะการทำงานของ PowerShell cmdlets ได้ จุดเดียวคือคุณไม่สามารถเอาชนะความสามารถโดยธรรมชาติของคำสั่ง cmdlet ได้ ลองมาดูตัวอย่างกัน
ตัวอย่างนี้อาจไม่ใช่สิ่งที่คุณต้องการใช้ในชีวิตจริง แต่จะแสดงให้คุณเห็นว่าการเปลี่ยนพฤติกรรม cmdlet อย่างรุนแรงนั้นง่ายเพียงใด หากคุณป้อนGet-TimeZone cmdlet ใน PowerShell คุณจะเห็นชื่อโซนเวลาที่พีซีของคุณได้รับการกำหนดค่าให้ใช้ในปัจจุบัน คุณสามารถดูตัวอย่างนี้ได้ในภาพด้านล่าง
ตอนนี้เราเปลี่ยน cmdlet นี้เพื่อไม่ให้แสดงโซนเวลาที่ระบบได้รับการกำหนดค่าให้ใช้ แต่เป็นโซนเวลาที่พร้อมใช้งานแทน ในการดำเนินการ นี้เราจำเป็นต้องมีไวยากรณ์ cmdlet โดยใช้Get-Help cmdlet ตามด้วยGet-TimeZone cmdlet คุณสามารถดูไวยากรณ์ของ cmdlet ด้านล่าง
ไวยากรณ์นี้มีพารามิเตอร์ชื่อListAvailableป้อนคำสั่งด้านล่าง:
$PSDefaultParameterValues.Add(“รับ-TimeZone:ListAvailable”,$True)
ส่วนแรกของคำสั่งนี้เพียงบอก PowerShell ว่าคุณต้องการเพิ่มค่าให้กับตารางแฮช เช่นเดียวกับที่เราทำกับตัวอย่างตัวย่อรัฐของสหรัฐอเมริกาในส่วนที่แล้ว ตารางแฮชนี้มีคู่คีย์/ค่า ในกรณีนี้ คีย์คือชื่อ cmdlet (Get-TimeZone) ตามด้วยเครื่องหมายจุลภาคและชื่อของพารามิเตอร์ที่คุณต้องการตั้งค่า ในกรณีนี้ ชื่อพารามิเตอร์คือ ListAvailable ส่วนที่สองของ cmdlet นี้คือค่าที่คุณต้องการกำหนดให้กับพารามิเตอร์ นี่คือ$ True โดยปกติพารามิเตอร์ ListAvailable ไม่ต้องการค่า ดังนั้นการระบุ$Trueคือวิธีที่คุณบอกให้ PowerShell ใช้พารามิเตอร์นี้โดยไม่ต้องกำหนดค่าให้กับพารามิเตอร์ดังกล่าว
หากคุณดูภาพด้านล่าง คุณจะเห็นว่าเกิดอะไรขึ้นเมื่อคุณเรียกใช้ Get-TimeZone cmdlet
สิ่งที่ควรคำนึงถึง
สิ่งที่สำคัญที่สุดที่ต้องทำความเข้าใจคือการเพิ่มค่าใหม่สำหรับพารามิเตอร์เริ่มต้นของ PowerShell คือการเปลี่ยนลักษณะการทำงานเริ่มต้นของ cmdlet ไม่ใช่ลบความสามารถของ cmdlet แม้ว่าคุณจะเปลี่ยน Get-TimeZone cmdlet เพื่อแสดงโซนเวลาที่พร้อมใช้งานแทนที่จะแสดงโซนเวลาปัจจุบัน คุณยังคงสามารถแสดงข้อมูลโซนเวลาปัจจุบันได้ หากคุณดูเพิ่มเติม
อีกสิ่งหนึ่งที่คุณต้องรู้คือสามารถลบพารามิเตอร์เริ่มต้นที่กำหนดเองได้ หากต้องการลบรายการเดียว ให้ใช้คำสั่ง$PSDefaultParameterValues.Removeตามด้วยชื่อของรายการที่คุณต้องการลบ ตัวอย่างเช่น:
$PSDefaultParameterValues.Remove("รับ-TimeZone:ListAvailable")
แต่คุณสามารถลบเนื้อหาทั้งหมดของตารางแฮชได้โดยใช้คำสั่งนี้:
$PSDefaultParameterValues.Clear();
คุณสามารถดูตัวอย่างเทคนิคทั้งสองด้านล่างนี้:
คุณสามารถลบตารางแฮชทั้งหมดหรือลบรายการเดียวได้
การเปลี่ยนลักษณะการทำงานเริ่มต้นของคำสั่ง cmdlet เป็นสิ่งที่คุณไม่ได้ทำบ่อยนัก แต่เมื่อคุณต้องการ คุณก็รู้วิธีเปลี่ยนแล้ว
ขอให้คุณประสบความสำเร็จ!
ดูเพิ่มเติม: