Поделиться через


12. Атрибуты

Редакционная заметка

Важно

Спецификация языка Windows PowerShell версии 3.0 была опубликована в декабре 2012 года и основана на Windows PowerShell 3.0. Эта спецификация не отражает текущее состояние PowerShell. Нет плана обновить эту документацию, чтобы отразить текущее состояние. Эта документация представлена здесь для получения исторической справки.

Документ спецификации доступен в виде документа Microsoft Word из Центра загрузок Microsoft: https://www.microsoft.com/download/details.aspx?id=36389. Этот документ Word был конвертирован для презентации на платформе Microsoft Learn. Во время преобразования некоторые редакционные изменения были внесены в соответствии с форматированием платформы Docs. Исправлены некоторые опечатки и незначительные ошибки.

Атрибутный объект связывает предопределенные системные сведения с целевым элементом, который может быть блоком параметров или отдельным параметром (§8.10). Каждый атрибутный объект имеет тип атрибута.

Сведения, предоставляемые атрибутом, также называются метаданными. Метаданные могут быть проверены командой или средой выполнения для управления обработкой данных либо внешними инструментами до момента выполнения команды, чтобы контролировать, как сама команда обрабатывается или поддерживается.

К одному целевому элементу можно применить несколько атрибутов.

Спецификация атрибута 12.1

Совет

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

attribute-list:
    attribute
    attribute-list new-lines~opt~ attribute

attribute:
    [ new-lines~opt~ attribute-name ( attribute-arguments new-lines~opt~ ) new-lines~opt~ ]
    type-literal

attribute-name:
    type-spec

attribute-arguments:
    attribute-argument
    attribute-argument new-lines~opt~ ,
    attribute-arguments

attribute-argument:
    new-lines~opt~ expression
    new-lines~opt~ simple-name
    new-lines~opt~ simple-name = new-lines~opt~ expression

Атрибут состоит из имени атрибута и необязательного списка позиционных и именованных аргументов. Позиционные аргументы (если таковые имеются) предшествуют именованным аргументам. Именованный аргумент состоит из простого имени , за которым опционально следует знак равенства и затем следует выражение . Если выражение пропущено, предполагается значение $true.

Атрибут с именем является зарезервированным типом атрибута (§12.3) или типом атрибута, определенным реализацией.

12.2 Экземпляры атрибутов

Экземпляр атрибута — это объект типа атрибута. Экземпляр представляет атрибут в процессе выполнения.

Чтобы создать объект определенного типа атрибута A, используйте нотацию A(). Атрибут объявляется путем помещения его экземпляра в [], как в [A()]. Некоторые типы атрибутов имеют позиционные и именованные параметры (§8.14), как функции и командлеты. Например

[A(10,IgnoreCase=$true)]

создается экземпляр типа A с использованием позиционного параметра, значение аргумента которого равно 10, и именованного параметра IgnoreCase, значение аргумента которого равно $true.

12.3 Зарезервированные атрибуты

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

12.3.1 Атрибут Alias

Этот атрибут используется в параметре скрипта для указания альтернативного имени параметра. Параметр может иметь несколько псевдонимов, и каждое имя псевдонима должно быть уникальным в списке параметров. Одно из возможных способов — иметь разные имена для параметра в разных наборах параметров (см. раздел ParameterSetName).

Аргумент атрибута имеет строку типа[].

Рассмотрим вызов функции Test1 со следующим блоком param, который вызывается следующим образом:

param (
    [Parameter(Mandatory = $true)]
    [Alias("CN")]
    [Alias("Name", "System")]
    [string[]] $ComputerName
)

Test1 "Mars", "Saturn"                # pass argument by position
Test1 -ComputerName "Mars", "Saturn"  # pass argument by name
Test1 -CN "Mars", "Saturn"            # pass argument using first alias
Test1 -Name "Mars", "Saturn"          # pass argument using second alias
Test1 -Sys "Mars", "Saturn"           # pass argument using third alias

Рассмотрим вызов функции Test2 со следующим блоком param, который вызывается следующим образом:

param (
    [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
    [Alias('PSPath')]
    [string] $LiteralPath
)

Get-ChildItem "E:\*.txt" | Test2 -LiteralPath { $_ ; "`n`t";
    $_.FullName + ".bak" }
Get-ChildItem "E:\*.txt" | Test2

Командлет Get-ChildItem (псевдоним dir) добавляет к возвращаемому объекту новое свойство NoteProperty типа stringс именем PSPath.

12.3.2 Атрибут AllowEmptyCollection

Этот атрибут используется в параметре скрипта , чтобы разрешить использование пустой коллекции в качестве аргумента обязательного параметра.

Рассмотрим вызов функции Test со следующим блоком param, который вызывается следующим образом:

param (
    [Parameter(Mandatory = $true)]
    [AllowEmptyCollection()]
    [string[]] $ComputerName
)

Test "Red", "Green" # $ComputerName has Length 2
Test "Red" # $ComputerName has Length 1
Test -Comp @() # $ComputerName has Length 0

12.3.3 Атрибут AllowEmptyString

Этот атрибут используется в параметре скрипта, чтобы разрешить пустую строку в качестве аргумента обязательного параметра.

Рассмотрим вызов функции Test со следующим блоком param, который вызывается следующим образом:

param (
    [Parameter(Mandatory = $true)]
    [AllowEmptyString()]
    [string] $ComputerName
)

Test "Red" # $ComputerName is "Red"
Test "" # empty string is permitted
Test -Comp "" # empty string is permitted

12.3.4 Атрибут AllowNull

Этот атрибут используется в параметре скрипта, чтобы разрешить $null в качестве аргумента обязательного параметра, для которого неявное преобразование недоступно.

Рассмотрим тест вызова функции, имеющий следующий блок парам, и который вызывается, как показано ниже.

param (
    [Parameter(Mandatory = $true)]
    [AllowNull()]
    [int[]] $Values
)

Test 10, 20, 30     # $values has Length 3, values 10, 20, 30
Test 10, $null, 30  # $values has Length 3, values 10, 0, 30
Test -Val $null     # $values has value $null

Обратите внимание, что второй случай выше не требует этого атрибута; Уже существует неявное преобразование из $null в int.

12.3.5 Атрибут CmdletBinding

Этот атрибут используется в списке атрибутов блока параметров функции, чтобы указать, что функция действует аналогично командлету. В частности, она позволяет функциям получать доступ к ряду методов и свойств через переменную $PSCmdlet, используя именованные блоки begin, process и end (§8.10.7).

Если этот атрибут присутствует, позиционные аргументы, не имеющие соответствующих позиционных параметров, вызывают сбой привязки параметров и $args не определены. (Без этого атрибута $args будет принимать любые несовпадные значения позиционного аргумента.)

Для определения характеристик параметра используются следующие аргументы:

Имя параметра назначение
ПоддерживаетShouldProcess (с именем)

Тип: bool; Значение по умолчанию: $false

Указывает, поддерживает ли функция вызовы метода ShouldProcess, который используется для запроса пользователя на отзыв, прежде чем функция вносит изменения в систему. Значение $true указывает, что так оно и есть. Значение $false указывает, что это не так.

ConfirmImpact (с указанием имени)

Тип: строка; Значение по умолчанию: "Средний"

Указывает уровень влияния выполняемого действия. Вызов метода ShouldProcess отображает запрос подтверждения только в том случае, если аргумент ConfirmImpact больше или равен значению переменной предпочтения $ConfirmPreference.

Возможные значения этого аргумента:

Нет. Отключайте все запросы на подтверждение.

Низкий уровень: выполненное действие имеет низкий риск потери данных.

Средний: действие, выполняемое, имеет средний риск потери данных.

Высокий уровень: выполняемое действие имеет высокий риск потери данных.

Значение $ConfirmPreference можно задать таким образом, чтобы только те командлеты, которые имеют равный или более высокий уровень воздействия, могли запрашивать подтверждение перед выполнением своей операции. Например, если для $ConfirmPreference установлено значение "Средний", командлеты со средним или высоким уровнем воздействия могут запросить подтверждение. Запросы от командлетов с низким уровнем влияния подавляются.

Имя набора параметров по умолчанию

Тип: строка; Значение по умолчанию: "__AllParameterSets"

Указывает набор параметров, используемый, если это невозможно определить из аргументов. См. именованный аргумент ParameterSetName в параметре атрибута ([§12.3.7][§12.3.7]).

PositionalBinding (с именем)

Тип: bool; Значение по умолчанию: $true

Указывает, поддерживается ли позициальная привязка. Значение этого аргумента игнорируется, если любые параметры указывают значения, отличные от по умолчанию, для именованного положения аргумента или именованного аргумента ParameterSetName в параметре атрибута ([§12.3.7][§12.3.7]). В противном случае, если аргумент $false, то параметры не являются позиционными, иначе им присваивается порядок в зависимости от очередности указания.

Ниже приведен пример платформы для использования этого атрибута:

[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")]
param ( ... )

begin { ... }
Get-process { ... }
end { ... }

12.3.6 Атрибут OutputType

Этот атрибут используется в списке атрибутов param-block, чтобы указать возвращаемые типы. Для определения характеристик параметра используются следующие аргументы:

Имя параметра назначение
Тип (позиция 0)

Тип: string[] или массив литеральных типов

Список типов возвращаемых значений.

ParameterSetName (с именем)

Тип: string[]

Задает наборы параметров, возвращающие типы, указанные соответствующими элементами параметра Type.

Ниже приведены несколько примеров использования этого атрибута:

[OutputType([int])] param ( ... )
[OutputType("double")] param ( ... )
[OutputType("string","string")] param ( ... )

12.3.7 Атрибут параметра

Этот атрибут используется в параметре скрипта. Для определения характеристик параметра используются следующие именованные аргументы:

Параметр назначение
HelpMessage (именованное)

Тип: строка

Этот аргумент указывает сообщение, которое предназначено для краткого описания параметра. Это сообщение используется в конкретной реализации, когда функция или командлет выполняется, но обязательный параметр с сообщением справки не имеет соответствующего аргумента.

В следующем примере показано объявление параметров, которое содержит описание параметра.

param ( [Параметр(Обязательный = $true;
HelpMessage = "Массив имен компьютеров.")]
[string[]] $ComputerName )

Windows PowerShell: если обязательный параметр не указан, среда выполнения запрашивает пользователю значение параметра. Диалоговое окно запроса содержит текст HelpMessage.

Обязательный (именованный)

Тип: bool; Значение по умолчанию: $false

Этот аргумент указывает, является ли параметр обязательным в заданном наборе параметров (см. аргумент ParameterSetName ниже). Значение $true указывает, что это так. Значение $false указывает, что это не так.

param ( [Параметр(Обязательный = $true)]
[string[]] $ComputerName )

Windows PowerShell: если обязательный параметр не указан, среда выполнения запрашивает пользователю значение параметра. Диалоговое окно запроса содержит текст HelpMessage, если таковой имеется.

ParameterSetName (с именем)

Тип: строка; Значение по умолчанию: "__AllParameterSets"

Можно написать одну функцию или командлет, которые могут выполнять различные действия для разных сценариев. Это делается путем предоставления различных групп параметров в зависимости от действия, который он хочет предпринять. Такие группировки параметров называются наборами параметров .

Аргумент ParameterSetName указывает параметр, к которому принадлежит параметр. Это означает, что каждый набор параметров должен иметь один уникальный параметр, который не является членом любого другого набора параметров.

Для параметров, принадлежащих нескольким наборам параметров, добавьте атрибут параметра для каждого набора параметров. Это позволяет определить параметр по-разному для каждого набора параметров.

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

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

При определении нескольких наборов параметров используется именованный аргумент DefaultParameterSetName атрибута CmdletBinding ([§12.3.5][§12.3.5]) для указания набора параметров по умолчанию. Среда выполнения использует набор параметров по умолчанию, если он не может определить набор параметров, используемый на основе сведений, предоставленных командой, или вызывает исключение, если набор параметров по умолчанию не указан.

В следующем примере показан тест функции с объявлением параметров двух параметров, принадлежащих двум разным наборам параметров, и третий параметр, принадлежащий обоим наборам:

param ( [Параметр(Обязательный = $true;
ParameterSetName = "Computer")]
[string[]] $ComputerName,

[Параметр(Обязательный = $true);
ParameterSetName = "User")]
[string[]] $UserName,

[Параметр(Обязательный = $true);
ParameterSetName = "Computer")]
[Parameter(ParameterSetName = "User")]
[int] $SharedParam = 5 )

if ($PSCmdlet.ParameterSetName -eq "Computer")
{
# обработка параметра "Компьютер"
}

elseif ($PSCmdlet.ParameterSetName -eq "Пользователь")
{
# обработать параметр "User"
}

}

Тестирование -ComputerName "Марс", Венера" -SharedParam 10
Тестирование -UserName "Мэри", Джек"
Тест -UserName "Мэри","Джек" -SharedParam 20

Должность (названная)

Тип: int

Этот аргумент указывает положение параметра в списке аргументов. Если этот аргумент не указан, имя параметра или его псевдоним необходимо указать явным образом при установке параметра. Если ни один из параметров функции не имеет позиций, позиции назначаются каждому параметру в зависимости от порядка их получения.

В следующем примере показано объявление параметра, значение которого должно быть указано в качестве первого аргумента при вызове функции.

параметр ( [Параметр(Позиция = 0)]
[string[]] $ComputerName )

ValueFromPipeline (с именованным параметром)

Тип: bool; Значение по умолчанию: $false

Этот аргумент указывает, принимает ли параметр входные данные из объекта конвейера. Значение $true указывает, что так оно и есть. Значение $false указывает, что это не так.

Укажите $true, если функция или командлет обращается к полному объекту, а не только к свойству объекта.

Только один параметр в наборе параметров может объявлять ValueFromPipeline как $true.

В следующем примере показано объявление обязательного параметра $ComputerName, который принимает входной объект, передаваемый функции из конвейера.

param ( [Параметр(Обязательный = $true;
ValueFromPipeline=$true)]
[string[]] $ComputerName )

Пример использования этого параметра в сочетании с атрибутом Alias см. в разделе [§12.3.1][§12.3.1].

ValueFromPipelineByPropertyName (именованный)

Тип: bool; Значение по умолчанию: $false

Этот аргумент указывает, принимает ли параметр значение из свойства объекта конвейера, имеющего то же имя или тот же псевдоним, что и этот параметр. Значение $true указывает, что так оно и есть. Значение $false указывает, что это не так.

Укажите $true, если заданы следующие условия: параметр обращается к свойству объекта, переданного по каналу, а свойство имеет то же имя, что и параметр, или свойство имеет тот же псевдоним, что и параметр.

Параметр, у которого свойство ValueFromPipelineByPropertyName установлено в $true, не обязательно должен иметь параметр в том же наборе с свойством ValueFromPipeline, установленным в $true.

Если функция имеет параметр $ComputerName, а объект с конвейером имеет свойство ComputerName, значение свойства ComputerName назначается параметру $ComputerName функции:

param ( [Параметр(Обязательный = $true;
ValueFromPipelineByPropertyName = $true)]
[string[]] $ComputerName )

Несколько параметров в наборе параметров могут определять значение ValueFromPipelineByPropertyName как $true. Хотя один входной объект не может быть привязан к нескольким параметрам, разные свойства в этом входном объекте могут быть привязаны к разным параметрам.

При привязке параметра со свойством входного объекта среда выполнения сначала ищет свойство с тем же именем, что и параметр.  Если такое свойство не существует, среда выполнения ищет псевдонимы этого параметра в порядке объявления, выбрав первый такой псевдоним, для которого существует свойство.

функция Process-Date
{
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Year,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Month,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Day
)

процесс { ... }
}

Get-Date | Process-Date

ValueFromRemainingArguments (именованный)

Тип: bool; Значение по умолчанию: $false

Этот аргумент указывает, принимает ли параметр все остальные аргументы, которые не привязаны к параметрам функции. Значение $true указывает, что так оно и есть. Значение $false указывает, что это не так.

В следующем примере показан параметр $Others, который принимает все остальные аргументы входного объекта, передаваемого в тест функции:

param ( [Parameter(Обязательный = $true)][int] $p 1,
[Параметр(обязательный = $true)][int] $p 2,
[Parameter(ValueFromRemainingArguments = $true)]
[string[]] $Другие )

Тест 10 20 # $Others имеет длину 0
Тест 10 20 30 40 # $Others имеет длину 2, значение 30 40

Реализация также может определять другие атрибуты.

Также предоставляются следующие атрибуты:

  • HelpMessageBaseName: указывает расположение, в котором находятся идентификаторы ресурсов. Например, этот параметр может указать сборку ресурсов, содержащую сообщения помощи, которые должны быть локализованы.
  • HelpMessageResourceId: указывает идентификатор ресурса для сообщения справки.

12.3.8 Атрибут PSDefaultValue

Этот атрибут используется внутри параметра скрипта для предоставления дополнительных сведений о параметре. Атрибут используется в определенной реализации. Для определения характеристик параметра используются следующие аргументы:

Имя параметра назначение
Справка (с названием)

Тип: строка

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

Windows PowerShell: сообщение используется в рамках описания параметра для раздела справки, отображаемого командлетом [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help) .

Значение (именованное)

Тип: объект

Этот аргумент указывает значение, которое должно быть значением по умолчанию параметра. Значение используется в определяемом реализацией способе.

Windows PowerShell: значение используется в рамках описания параметра для раздела справки, отображаемого командлетом [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help), если свойство справки не указано.

12.3.9 Атрибут SupportsWildcards

Этот атрибут используется внутри параметра скрипта для предоставления дополнительных сведений о параметре. Атрибут используется в определенной реализации.

Этот атрибут используется как часть описания параметра для раздела справки, отображаемого командлетом Get-Help.

12.3.10 Атрибут ValidateCount

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

Имя параметра назначение
MinLength (позиция 0)

Тип: int

Этот аргумент указывает минимальное число допустимых значений аргументов.

MaxLength (позиция 1)

Тип: int

Этот аргумент указывает максимально допустимое число значений аргументов.

В отсутствие этого атрибута соответствующий список аргументов параметра может иметь любую длину.

Рассмотрим тест вызова функции, имеющий следующий блок парам, и который вызывается, как показано ниже.

param (
    [ValidateCount(2, 5)]
    [int[]] $Values
)

Temp 10, 20, 30
Temp 10                         # too few argument values
Temp 10, 20, 30, 40, 50, 60     # too many argument values

[ValidateCount(3, 4)]$Array = 1..3
$Array = 10                     # too few argument values
$Array = 1..100                 # too many argument values

12.3.11 Атрибут ValidateLength

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

Имя параметра назначение
MinLength (позиция 0)

Тип: int

Этот аргумент указывает минимальное число допустимых символов.

MaxLength (позиция 1)

Тип: int

Этот аргумент указывает максимально допустимое число символов.

В отсутствие этого атрибута соответствующий аргумент параметра может иметь любую длину.

Рассмотрим тест вызова функции, имеющий следующий блок парам, и который вызывается, как показано ниже.

param ( [Parameter(Mandatory = $true)]
[ValidateLength(3,6)]
[string[]] $ComputerName )

Test "Thor","Mars"     # length is ok
Test "Io","Mars"       # "Io" is too short
Test "Thor","Jupiter"  # "Jupiter" is too long

12.3.12 Атрибут ValidateNotNull

Этот атрибут используется в script-parameter или переменной, чтобы указать, что аргумент параметра не может быть $null или коллекцией, содержащей элемент с нулевым значением.

Рассмотрим вызов функции Test со следующим блоком параметров, который вызывается как 'shown'.

param (
    [ValidateNotNull()]
    [string[]] $Names
)

Test "Jack", "Jill"     # ok
Test "Jane", $null      # $null array element value not allowed
Test $null              # null array not allowed

[ValidateNotNull()]$Name = "Jack" # ok
$Name = $null           # null value not allowed

12.3.13 Атрибут ValidateNotNullOrEmpty

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

Рассмотрим вызов функции Test со следующим блоком param, который вызывается следующим образом:

param (
    [ValidateNotNullOrEmpty()]
    [string[]] $Names
)

Test "Jack", "Jill"    # ok
Test "Mary", ""        # empty string not allowed
Test "Jane", $null     # $null array element value not allowed
Test $null             # null array not allowed
Test @()               # empty array not allowed

[ValidateNotNullOrEmpty()]$Name = "Jack" # ok
$Name = ""             # empty string not allowed
$Name = $null          # null value not allowed

12.3.14 Атрибут ValidatePattern

Этот атрибут используется в параметре скрипта или переменной для указания регулярного выражения для сопоставления шаблона аргумента параметра. Для определения характеристик параметра используются следующие аргументы:

Имя параметра назначение
RegexString (позиция 0)

Тип: Строка

Регулярное выражение, используемое для проверки аргумента параметра

Параметры (именованные)

Тип: Обычный-Expression-Option

См. раздел [§4.2.6.4][§4.2.6.4] для получения информации о допустимых значениях.

Если аргумент является коллекцией, каждый элемент в коллекции должен соответствовать шаблону.

Рассмотрим вызов функции Test со следующим блоком param, который вызывается следующим образом:

param (
    [ValidatePattern('\^[A-Z][1-5][0-9]$')]
    [string] $Code,

    [ValidatePattern('\^(0x|0X)([A-F]|[a-f]|[0-9])([A-F]|[a-f]|[0-9])$')]
    [string] $HexNum,

    [ValidatePattern('\^[+|-]?[1-9]$')]
    [int] $Minimum
)

Test -C A12 # matches pattern
Test -C A63 # does not match pattern

Test -H 0x4f # matches pattern
Test -H "0XB2" # matches pattern
Test -H 0xK3 # does not match pattern

Test -M -4 # matches pattern
Test -M "+7" # matches pattern
Test -M -12 # matches pattern, but is too long

[ValidatePattern('\^[a-z][a-z0-9]\*$')]$ident = "abc"
$ident = "123" # does not match pattern

12.3.15 Атрибут ValidateRange

Этот атрибут используется в параметре скрипта или переменной для указания минимальных и максимальных значений аргумента параметра. Для определения характеристик параметра используются следующие аргументы:

Имя параметра назначение
MinRange (позиция 0)

Тип: объект

Этот аргумент указывает минимально допустимое значение.

MaxRange (позиция 1)

Тип: объект

Этот аргумент указывает максимально допустимое значение.

В отсутствие этого атрибута ограничение диапазона отсутствует.

Рассмотрим вызов функции Test1 со следующим блоком param, который вызывается следующим образом:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange(1, 10)]
    [int] $StartValue
)

Test1 2
Test1 -St 7
Test1 -3 # value is too small
Test1 12 # value is too large

Рассмотрим вызов функции Test2 со следующим блоком параметров и вызовами:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange("b", "f")]
    [string] $Name
)

Test2 "Bravo" # ok
Test2 "Alpha" # value compares less than the minimum
Test2 "Hotel" # value compares greater than the maximum

Рассмотрим вызов функции Test3 со следующим блоком param, который вызывается следующим образом:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange(0.002, 0.003)]
    [double] $Distance
)

Test3 0.002
Test3 0.0019    # value is too small
Test3 "0.005"   # value is too large

[ValidateRange(13, 19)]$teenager = 15
$teenager = 20  # value is too large

12.3.16 Атрибут ValidateScript

Этот атрибут используется в качестве параметра скрипта или переменной , чтобы указать скрипт, который будет использоваться для проверки аргумента этого параметра.

Аргумент в позиции 1 — это скрипт-блок-выражение .

Рассмотрим вызов функции Test со следующим блоком param, который вызывается следующим образом:

param (
    [Parameter(Mandatory = $true)]
    [ValidateScript( { ($_ -ge 1 -and $_ -le 3) -or ($_ -ge 20) })]
    [int] $Count
)

Test 2 # ok, valid value
Test 25 # ok, valid value
Test 5 # invalid value
Test 0 # invalid value

[ValidateScript({$_.Length --gt 7})]$password = "password" # ok
$password = "abc123" # invalid value

12.3.17 Атрибут ValidateSet

Этот атрибут используется в параметре скрипта или переменной , чтобы указать набор допустимых значений для аргумента параметра или. Для определения характеристик параметра используются следующие аргументы:

Имя параметра назначение
ValidValues (позиция 0)

Тип: string[]

Набор допустимых значений.

IgnoreCase (именованный)

Тип: bool; Значение по умолчанию: $true

Указывает, следует ли игнорировать регистр для параметров типа строка.

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

Рассмотрим вызов функции Test со следующим блоком param, который вызывается следующим образом:

param ( [ValidateSet("Red", "Green", "Blue")]
    [string] $Color,

    [ValidateSet("up", "down", "left", "right", IgnoreCase =
        $false)]
    [string] $Direction

)

Test -Col "RED"    # case is ignored, is a member of the set
Test -Col "white"  # case is ignored, is not a member of the set

Test -Dir "up"     # case is not ignored, is a member of the set
Test -Dir "Up"     # case is not ignored, is not a member of the set

[ValidateSet(("Red", "Green", "Blue")]$color = "RED" # ok, case is ignored
$color = "Purple"  # case is ignored, is not a member of the set