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

พารามิเตอร์ไดนามิก Cmdlet


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

บันทึก

ผู้ให้บริการและฟังก์ชัน PowerShell ยังสามารถกำหนดพารามิเตอร์แบบไดนามิกได้

พารามิเตอร์แบบไดนามิกใน PowerShell cmdlets

PowerShell ใช้พารามิเตอร์แบบไดนามิกใน cmdlets ของผู้ให้บริการหลายราย ตัวอย่างเช่น Get-Item และ Get-ChildItem cmdlet จะเพิ่มพารามิเตอร์ CodeSigningCert ที่รันไทม์เมื่อพารามิเตอร์ Path ระบุเส้นทางผู้ให้บริการ ใบรับรอง หากพารามิเตอร์ Path ระบุเส้นทางสำหรับผู้ให้บริการรายอื่น พารามิเตอร์ CodeSigningCert จะไม่สามารถใช้ได้

ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มพารามิเตอร์ CodeSigningCert ณ รันไทม์ เมื่อรัน Get-Item

ในตัวอย่างนี้ รันไทม์ของ PowerShell ได้เพิ่มพารามิเตอร์ และ cmdlet สำเร็จ

Get-Item -Path cert:\CurrentUser -CodeSigningCert
Location   : CurrentUser
StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...}

ในตัวอย่างนี้ มีการระบุไดรฟ์ FileSystem และส่งคืนข้อผิดพลาด ข้อความแสดงข้อผิดพลาดระบุว่าไม่พบพารามิเตอร์ CodeSigningCert

Get-Item -Path C:\ -CodeSigningCert
Get-Item : A parameter cannot be found that matches parameter name 'codesigningcert'.
At line:1 char:37
+  get-item -path C:\ -codesigningcert <<<<
--------
    CategoryInfo          : InvalidArgument: (:) [Get-Item], ParameterBindingException
    FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetItemCommand

รองรับพารามิเตอร์ไดนามิก

เพื่อรองรับพารามิเตอร์ไดนามิก องค์ประกอบต่อไปนี้จะต้องรวมอยู่ในรหัส cmdlet

อินเทอร์เฟซ

System.Management.Automation.IDynamicParameters อินเทอร์เฟซนี้มีวิธีการดึงข้อมูลพารามิเตอร์แบบไดนามิก

ตัวอย่างเช่น:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

วิธี

System.Management.Automation.IDynamicParameters.GetDynamicParameters วิธีการนี้ดึงข้อมูลวัตถุที่ประกอบด้วยข้อกำหนดพารามิเตอร์แบบไดนามิก

ตัวอย่างเช่น:

 public object GetDynamicParameters()
 {
   if (employee)
   {
     context= new SendGreetingCommandDynamicParameters();
     return context;
   }
   return null;
}
private SendGreetingCommandDynamicParameters context;

ระดับ

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

ตัวอย่างเช่น:

public class SendGreetingCommandDynamicParameters
{
  [Parameter]
  [ValidateSet ("Marketing", "Sales", "Development")]
  public string Department
  {
    get { return department; }
    set { department = value; }
  }
  private string department;
}

สำหรับตัวอย่างที่สมบูรณ์ของ cmdlet ที่รองรับพารามิเตอร์ไดนามิก โปรดดูวิธีการประกาศพารามิเตอร์ไดนามิก

ดูเพิ่มเติม

  • System.Management.Automation.IDynamicParameters
  • System.Management.Automation.IDynamicParameters.GetDynamicParameters
  • วิธีการประกาศพารามิเตอร์แบบไดนามิก
  • การเขียน Windows PowerShell Cmdlet

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