Наборы параметров командлета

В PowerShell используются наборы параметров, позволяющие создавать один командлет, который может выполнять различные действия в различных сценариях. Наборы параметров позволяют предоставлять пользователю различные параметры. И, чтобы получить различные сведения на основе параметров, указанных пользователем.

Примеры наборов параметров

Например, Get-EventLog командлет PowerShell возвращает различные сведения в зависимости от того, указывает ли пользователь параметр List или i . Если указан параметр List , командлет возвращает сведения о самих файлах журнала, но не сведения о событиях, которые они содержат. Если указан параметр " /l ", командлет возвращает сведения о событиях в определенном журнале событий. Параметры List и параметров задания указывают два отдельных набора параметров.

Уникальный параметр

Каждый набор параметров должен иметь уникальный параметр, используемый средой выполнения PowerShell для предоставления соответствующего набора параметров. Если это возможно, уникальный параметр должен быть обязательным. Если параметр является обязательным, пользователь должен указать параметр, а среда выполнения PowerShell использует этот параметр для определения набора параметров. Уникальный параметр не может быть обязательным, если командлет предназначен для запуска без указания каких-либо параметров.

Несколько наборов параметров

На следующем рисунке в левом столбце показаны три допустимых набора параметров. Параметр A уникален для первого набора параметров, параметр B уникален для второго набора параметров, а параметр C является уникальным для третьего набора параметров. В правом столбце наборы параметров не имеют уникального параметра.

Иллюстрация наборов параметров

Требования к наборам параметров

Следующие требования применяются ко всем наборам параметров.

  • Каждый набор параметров должен иметь по крайней мере один уникальный параметр. Если это возможно, присвоить этому параметру обязательный параметр.

  • Набор параметров, содержащий несколько позиционированных параметров, должен определять уникальные позиции для каждого параметра. Ни один из двух параметров позиционирования не может указывать одну и ту же точку.

  • Только один параметр в наборе может объявить ValueFromPipeline ключевое слово со значением true . Несколько параметров могут определять ValueFromPipelineByPropertyName ключевое слово со значением true .

  • Если для параметра не задан набор параметров, параметр относится ко всем наборам параметров.

Примечание

Для командлета или функции существует ограничение в 32 наборов параметров.

Наборы параметров по умолчанию

Если определено несколько наборов параметров, можно использовать DefaultParameterSetName ключевое слово атрибута командлета для указания набора параметров по умолчанию. PowerShell использует набор параметров по умолчанию, если не может определить набор параметров для использования на основе сведений, предоставленных командой. Дополнительные сведения об атрибуте командлета см. в разделе объявление атрибута командлета.

Объявление наборов параметров

Чтобы создать набор параметров, необходимо указать ParameterSetName ключевое слово при объявлении атрибута Parameter для каждого параметра в наборе параметров. Для параметров, принадлежащих к нескольким наборам параметров, добавьте атрибут параметра для каждого набора параметров. Этот атрибут позволяет определить параметр по-разному для каждого набора параметров. Например, можно определить параметр как обязательный в одном наборе и необязательный в другом. Однако каждый набор параметров должен содержать один уникальный параметр. Дополнительные сведения см. в разделе объявление атрибута Parameter.

В следующем примере параметр username является уникальным параметром Test01 набора параметров, а параметр ComputerName — уникальным параметром Test02 набора параметров. Параметр шаредпарам относится к обоим наборам и является обязательным для 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;