次の方法で共有


コマンドレット パラメーター セット

PowerShell では、パラメーター セットを使用して、シナリオごとに異なるアクションを実行できる 1 つのコマンドレットを記述できます。 パラメーター セットを使用すると、ユーザーに異なるパラメーターを公開できます。 また、ユーザーが指定したパラメーターに基づいて異なる情報を返します。

パラメーター セットの例

たとえば、ユーザーが List または LogName パラメーターを指定するかどうかに応じて、PowerShell コマンドレットは異なる情報 Get-EventLog を返 します。 List パラメーター を指定 した場合、コマンドレットはログ ファイル自体に関する情報を返しますが、含まれているイベント情報は返されません。 LogName パラメーターを指定 した場合、コマンドレットは特定のイベント ログ内のイベントに関する情報を返します。 List パラメーターと LogName パラメーターは、2 つの個別のパラメーター セットを識別します。

一意のパラメーター

各パラメーター セットには、PowerShell ランタイムが適切なパラメーター セットを公開するために使用する一意のパラメーターが必要です。 可能であれば、一意のパラメーターは必須パラメーターである必要があります。 パラメーターが必須の場合、ユーザーは パラメーターを指定する必要があります。PowerShell ランタイムは、そのパラメーターを使用してパラメーター セットを識別します。 コマンドレットがパラメーターを指定せずに実行するように設計されている場合、一意のパラメーターを必須にすることはできません。

複数のパラメーター セット

次の図では、左側の列に 3 つの有効なパラメーター セットが示されています。 パラメーター A は最初のパラメーター セットに対して一意であり、パラメーター B は 2 番目のパラメーター セットに対して一意であり、パラメーター C は 3 番目のパラメーター セットに対して一意です。 右側の列では、パラメーター セットに一意のパラメーターが含め " は含め "ない"。

パラメーター セットの図

パラメーター セットの要件

次の要件は、すべてのパラメーター セットに適用されます。

  • 各パラメーター セットには、少なくとも 1 つの一意のパラメーターが必要です。 可能であれば、このパラメーターを必須のパラメーターにしてください。

  • 複数の位置指定パラメーターを含むパラメーター セットでは、パラメーターごとに一意の位置を定義する必要があります。 同じ位置を指定できる位置指定パラメーターは 2 つはありません。

  • 値 が のキーワードを宣言できるのは、セット内 ValueFromPipeline の 1 つのパラメーターのみです true 。 複数のパラメーターで、 の ValueFromPipelineByPropertyName 値を使用して キーワードを定義できます true

  • パラメーターにパラメーター セットが指定されていない場合、パラメーターは、すべてのパラメーター セットに属します。

注意

コマンドレットまたは関数には、32 のパラメーター セットの制限があります。

既定のパラメーター セット

複数のパラメーター セットが定義されている場合は、Cmdlet 属性の キーワードを使用 DefaultParameterSetName して、既定のパラメーター セットを指定できます。 PowerShell では、コマンドによって提供される情報に基づいて使用するパラメーター セットを決定できない場合、既定のパラメーター セットが使用されます。 コマンドレット属性の詳細については 、「コマンドレット 属性宣言 」を参照してください

パラメーター セットの宣言

パラメーター セットを作成するには、パラメーター セット内のすべてのパラメーターに対して Parameter 属性を宣言するときに キーワード ParameterSetName を指定する必要があります。 複数のパラメーター セットに属するパラメーターの場合は、各パラメーター セット の Parameter 属性を追加します。 この属性を使用すると、パラメーター セットごとにパラメーターを異なる方法で定義できます。 たとえば、あるセットでは必須としてパラメーターを定義し、別のセットでは省略可能として定義できます。 ただし、各パラメーター セットには、一意のパラメーターを 1 つ含む必要があります。 詳細については、「パラメーター属性宣言 」を参照してください

次の例では 、UserName パラメーターはパラメーター セットの一意のパラメーターであり、ComputerName パラメーターはパラメーター セットの一意 Test01Test02 パラメーターです。 SharedParam パラメーター は両方のセットに属し、パラメーター セットには必須ですが、パラメーター セットには Test01 Test02 省略可能です。

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test01")]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test02")]
public string ComputerName
{
  get { return computerName; }
  set { computerName = value; }
}
private string computerName;

[Parameter(Mandatory= true, ParameterSetName = "Test01")]
[Parameter(ParameterSetName = "Test02")]
public string SharedParam
{
    get { return sharedParam; }
    set { sharedParam = value; }
}
private string sharedParam;