如何宣告動態參數
此範例示範如何定義在執行時間新增至 Cmdlet 的動態參數。 在此範例中, Department
每當使用者指定切換參數時,就會將參數新增至 Cmdlet Employee
。 如需動態參數的詳細資訊,請參閱 Cmdlet 動態參數。
若要定義動態參數
在 Cmdlet 類別宣告中,加入 Idynamicparameters 介面,如下所示。
public class SendGreetingCommand : Cmdlet, IDynamicParameters
呼叫 Idynamicparameters. Getdynamicparameters * 方法,這個方法會傳回定義動態參數的物件。 在此範例中,當指定參數時,會呼叫方法
Employee
。public object GetDynamicParameters() { if (employee) { context= new SendGreetingCommandDynamicParameters(); return context; } return null; } private SendGreetingCommandDynamicParameters context;
宣告定義要加入之動態參數的類別。 您可以使用您用來宣告靜態 Cmdlet 參數的屬性來宣告動態參數。
public class SendGreetingCommandDynamicParameters { [Parameter] [ValidateSet ("Marketing", "Sales", "Development")] public string Department { get { return department; } set { department = value; } } private string department; }
範例
在此範例中, Department
每當使用者指定參數時,就會加入參數 Employee
。 Department
參數是選擇性參數,而 ValidateSet 屬性是用來指定允許的引數。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation; // PowerShell assembly.
namespace SendGreeting
{
// Declare the cmdlet class that supports the
// IDynamicParameters interface.
[Cmdlet(VerbsCommunications.Send, "Greeting")]
public class SendGreetingCommand : Cmdlet, IDynamicParameters
{
// Declare the parameters for the cmdlet.
[Parameter(Mandatory = true)]
public string Name
{
get { return name; }
set { name = value; }
}
private string name;
[Parameter]
[Alias ("FTE")]
public SwitchParameter Employee
{
get { return employee; }
set { employee = value; }
}
private Boolean employee;
// Implement GetDynamicParameters to
// retrieve the dynamic parameter.
public object GetDynamicParameters()
{
if (employee)
{
context= new SendGreetingCommandDynamicParameters();
return context;
}
return null;
}
private SendGreetingCommandDynamicParameters context;
// Overide the ProcessRecord method to process the
// supplied user name and write out a greeting to
// the user by calling the WriteObject method.
protected override void ProcessRecord()
{
WriteObject("Hello " + name + "! ");
if (employee)
{
WriteObject("Department: " + context.Department);
}
}
}
// Define the dynamic parameters to be added
public class SendGreetingCommandDynamicParameters
{
[Parameter]
[ValidateSet ("Marketing", "Sales", "Development")]
public string Department
{
get { return department; }
set { department = value; }
}
private string department;
}
}
另請參閱
Runtimedefinedparameterdictionary。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應