ค้นหาเว็บไซต์

ประเภทของพารามิเตอร์ Cmdlet


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

พารามิเตอร์ตำแหน่งและชื่อ

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

หากต้องการกำหนดพารามิเตอร์ที่มีชื่อ ให้ละคีย์เวิร์ด ตำแหน่ง ในการประกาศแอตทริบิวต์ พารามิเตอร์ ดังที่แสดงในการประกาศพารามิเตอร์ต่อไปนี้

[Parameter(ValueFromPipeline=true)]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

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

[Parameter(Position = 0)]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

บันทึก

การออกแบบ cmdlet ที่ดีแนะนำให้ประกาศพารามิเตอร์ที่ใช้มากที่สุดเป็นพารามิเตอร์ตำแหน่ง เพื่อให้ผู้ใช้ไม่ต้องป้อนชื่อพารามิเตอร์เมื่อเรียกใช้ cmdlet

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

คำสั่งต่อไปนี้แสดงวิธีต่างๆ ที่คุณสามารถระบุอาร์กิวเมนต์เดียวและหลายอาร์กิวเมนต์สำหรับพารามิเตอร์ของ Get-Command cmdlet โปรดสังเกตว่าในสองตัวอย่างสุดท้าย ไม่จำเป็นต้องระบุ -name เนื่องจากพารามิเตอร์ Name ถูกกำหนดให้เป็นพารามิเตอร์ตำแหน่ง

Get-Command -Name get-service
Get-Command -Name get-service,set-service
Get-Command get-service
Get-Command get-service,set-service

พารามิเตอร์บังคับและพารามิเตอร์เสริม

คุณยังสามารถกำหนดพารามิเตอร์ cmdlet เป็นพารามิเตอร์บังคับหรือพารามิเตอร์ทางเลือกได้ (ต้องระบุพารามิเตอร์บังคับก่อนที่รันไทม์ Windows PowerShell จะเรียกใช้ cmdlet) ตามค่าเริ่มต้น พารามิเตอร์ถูกกำหนดให้เป็นทางเลือก

ในการกำหนดพารามิเตอร์บังคับ ให้เพิ่มคีย์เวิร์ด บังคับ ในการประกาศแอตทริบิวต์พารามิเตอร์ และตั้งค่าเป็น true ดังที่แสดงในการประกาศพารามิเตอร์ต่อไปนี้

[Parameter(Position = 0, Mandatory = true)]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

หากต้องการกำหนดพารามิเตอร์ทางเลือก ให้ละคีย์เวิร์ด บังคับ ในการประกาศแอตทริบิวต์ พารามิเตอร์ ดังที่แสดงในการประกาศพารามิเตอร์ต่อไปนี้

[Parameter(Position = 0)]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

สลับพารามิเตอร์

Windows PowerShell มีประเภท System.Management.Automation.SwitchParameter ที่ช่วยให้คุณสามารถกำหนดพารามิเตอร์ที่มีค่าถูกตั้งค่าเป็น false โดยอัตโนมัติ หากไม่ได้ระบุพารามิเตอร์เมื่อเรียกใช้ cmdlet เมื่อใดก็ตามที่เป็นไปได้ ให้ใช้พารามิเตอร์สวิตช์แทนพารามิเตอร์บูลีน

ลองพิจารณาตัวอย่างต่อไปนี้ ตามค่าเริ่มต้น cmdlet ของ Windows PowerShell หลายตัวไม่ส่งวัตถุเอาท์พุตไปป์ไลน์ อย่างไรก็ตาม cmdlet เหล่านี้มีพารามิเตอร์สวิตช์ PassThru ที่แทนที่ลักษณะการทำงานเริ่มต้น ถ้ามีระบุพารามิเตอร์ PassThru เมื่อเรียก cmdlet เหล่านี้ cmdlet จะส่งกลับวัตถุผลลัพธ์ไปยังไปป์ไลน์

หากคุณต้องการให้พารามิเตอร์มีค่าเริ่มต้นเป็น true เมื่อไม่ได้ระบุพารามิเตอร์ในการเรียก ให้พิจารณาการกลับความรู้สึกของพารามิเตอร์ สำหรับตัวอย่าง แทนที่จะตั้งค่าแอตทริบิวต์พารามิเตอร์เป็นค่าบูลีนเป็น true ให้ประกาศคุณสมบัติเป็นประเภท System.Management.Automation.SwitchParameter จากนั้นตั้งค่าเริ่มต้นของพารามิเตอร์เป็น เท็จ.

เมื่อต้องการกำหนดพารามิเตอร์สวิตช์ ให้ประกาศคุณสมบัติเป็นชนิด System.Management.Automation.SwitchParameter ดังที่แสดงในตัวอย่างต่อไปนี้

[Parameter(Position = 1)]
public SwitchParameter GoodBye
{
  get { return goodbye; }
  set { goodbye = value; }
}
private bool goodbye;

เมื่อต้องการให้ cmdlet ดำเนินการกับพารามิเตอร์เมื่อมีการระบุ ให้ใช้โครงสร้างต่อไปนี้ภายในวิธีการประมวลผลอินพุตอย่างใดอย่างหนึ่ง

protected override void ProcessRecord()
{
  WriteObject("Switch parameter test: " + userName + ".");
  if(goodbye)
  {
    WriteObject(" Goodbye!");
  }
} // End ProcessRecord

ดูเพิ่มเติม

การเขียน Windows PowerShell Cmdlet

บทความที่เกี่ยวข้อง