Согласно MS Docs:
Требования к набору параметров Следующие требования применяются ко всем наборам параметров.
Каждый набор параметров должен иметь хотя бы один уникальный параметр. Если возможно, сделайте этот параметр обязательным параметром.
Набор параметров, содержащий несколько позиционных параметров, должен определять уникальные позиции для каждого параметра. Никакие два позиционных параметра не могут указывать одну и ту же позицию.
Только один параметр в наборе может объявить ключевое слово ValueFromPipeline со значением true. Несколько параметров могут определять ключевое слово ValueFromPipelineByPropertyName со значением true.
Если для параметра не указан набор параметров, параметр принадлежит всем наборам параметров.
Это хорошо напиши на эту топи c, которая хранилась рядом и помогла мне. Отрезать это здесь, просто дать вам ссылку, на которую можно перейти. Хотя это не набор параметров, заданный c, применяются те же правила.
Указание положения параметра PowerShell
Для некоторых команд имеет смысл разрешить вам передавать вещи по положению, а не по имени, особенно в тех случаях, когда было бы немного путаницы, если имена параметров пропущены (как в этом примере).
function Test-Position
{
[CmdletBinding()]
Param
(
[parameter(Position=0)]$parm1,
[parameter(Position=1)]$parm2,
[parameter(Position=2)]$parm3,
[parameter(Position=3)]$parm4
)
}
Что что делать?
> Согласно справке (about_Functions_CmdletBindingAttribute), вы должны использовать необязательный аргумент PositionalBinding для атрибута CmdletBinding () и установить его в $ false.
Это приведет к тому, что все параметры по умолчанию не будут разрешены позицией. Затем> вы можете указать Позицию для любых (возможно, только одного или двух) параметров, которые вы будете использовать sh для позиции.
Например, это позволит использовать только $ parm1 для позиции:
function Test-Position
{
[CmdletBinding(PositionalBinding = $false)]
Param([parameter(Position=0)]$parm1,
$parm2,
$parm3,
$parm4)
}
Но подождите, это становится проще
Даже несмотря на то, что в справке говорится, что все параметры являются позиционными по умолчанию, оказывается, что использование Position для одного параметра означает что вы должны использовать его для любых параметров, к которым вы хотите получить доступ по позиции.
Например, в этой версии функции я не указал ositionalBinding = $ False в атрибуте CmdletBinding, но только первый параметр доступен по позиции.
function Test-Position2
{
[CmdletBinding()]
Param
(
[parameter(Position=0)]$parm1,
$parm2,
$parm3,
$parm4
)
}
Это интересно для меня, так как кажется, что противоречит тому, что в справке. В частности, в справке говорится, что все параметры позиционные. Затем говорится, что для отключения этого значения по умолчанию вы должны использовать параметр PositionalBinding. Это показывает, что вам не нужно этого делать, если только вам не нужны никакие позиционные параметры.
В качестве последнего примера, просто чтобы убедиться, что мы понимаем, как используется значение Position, рассмотрим следующую функцию и справка по синтаксису:
function Test-Position3
{
[CmdletBinding()]
Param
(
$parm1,
$parm2,
[parameter(Position=1)]$parm3,
[parameter(Position=0)]$parm4
)
}
Включив Position в 2 параметра, мы обеспечили доступность двух других параметров только по имени. Кроме того, назначенные позиции отличаются от порядка, в котором параметры определены в функции, и это отражено в справке по синтаксису.