Cmdlet 動態參數
Cmdlet 可以定義特殊條件下使用者可用的參數,例如,當另一個參數的引數為特定值時。 這些參數會在執行時間加入,而且會被稱為動態參數,因為它們只會在需要時才新增。 例如,您可以設計一個 Cmdlet,只在指定特定切換參數時,才會新增數個參數。
注意
提供者和 PowerShell 函數也可以定義動態參數。
PowerShell Cmdlet 中的動態參數
PowerShell 在許多提供者 Cmdlet 中使用動態參數。 例如, Get-Item
Get-ChildItem
當 Path 參數指定 憑證 提供者路徑時,和 Cmdlet 會在執行時間新增 CodeSigningCert 參數。 如果 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 程式碼中必須包含下列元素。
介面
IDynamicParameters的。 這個介面會提供可抓取動態參數的方法。
例如:
public class SendGreetingCommand : Cmdlet, IDynamicParameters
方法
IDynamicParameters. GetDynamicParameters。 這個方法會抓取包含動態參數定義的物件。
例如:
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;
}
如需支援動態參數之 Cmdlet 的完整範例,請參閱 如何宣告動態參數。