次の方法で共有


コマンドレットの動的パラメーター

コマンドレットは、別のパラメーターの引数が特定の値である場合など、特別な条件下でユーザーが使用できるパラメーターを定義できます。 これらのパラメーターは実行時に追加され、必要なときにのみ追加されるため、動的パラメーターと呼ばれます。 たとえば、特定のスイッチ パラメーターが指定されている場合にのみ、複数のパラメーターを追加するコマンドレットを設計できます。

プロバイダーと 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;
}

動的パラメーターをサポートするコマンドレットの完全な例については、「動的パラメーターを宣言する方法」を参照してください。

こちらもご覧ください