พารามิเตอร์ไดนามิก 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