コマンドレットは、別のパラメーターの引数が特定の値である場合など、特別な条件下でユーザーが使用できるパラメーターを定義できます。 これらのパラメーターは実行時に追加され、必要なときにのみ追加されるため、動的パラメーターと呼ばれます。 たとえば、特定のスイッチ パラメーターが指定されている場合にのみ、複数のパラメーターを追加するコマンドレットを設計できます。
注
プロバイダーと PowerShell 関数では、動的パラメーターを定義することもできます。
PowerShell コマンドレットの動的パラメーター
PowerShell では、いくつかのプロバイダー コマンドレットで動的パラメーターが使用されます。 たとえば、Path パラメーターで Certificate プロバイダー パスが指定されている場合、Get-Item
コマンドレットと Get-ChildItem
コマンドレットは実行時に CodeSigningCert パラメーターを追加します。
Path パラメーターで別のプロバイダーのパスを指定した場合、CodeSigningCert パラメーターは使用できません。
次の例は、実行時に CodeSigningCert パラメーターを追加する方法 Get-Item
示しています。
この例では、PowerShell ランタイムによってパラメーターが追加され、コマンドレットが成功しています。
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
動的パラメーターのサポート
動的パラメーターをサポートするには、コマンドレット コードに次の要素を含める必要があります。
インターフェイス
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;
クラス
追加する動的パラメーターを定義するクラス。 このクラスには、各パラメーターの Parameter 属性と、コマンドレットに必要な省略可能な Alias 属性と Validation 属性を含める必要があります。
次に例を示します。
public class SendGreetingCommandDynamicParameters
{
[Parameter]
[ValidateSet ("Marketing", "Sales", "Development")]
public string Department
{
get { return department; }
set { department = value; }
}
private string department;
}
動的パラメーターをサポートするコマンドレットの完全な例については、「動的パラメーターを宣言する方法」を参照してください。
こちらもご覧ください
PowerShell