Compartilhar via


12. Atributos

Um objeto de atributo associa informações predefinidas do sistema a um elemento de destino, que pode ser um bloco param ou um parâmetro (seção 8.10). Cada objeto de atributo tem um tipo de atributo.

As informações fornecidas por um atributo também são conhecidas como metadados. Os metadados podem ser examinados pelo comando ou pelo ambiente de execução para controlar como o comando processa dados ou antes do runtime, por ferramentas externas para controlar como o comando em si é processado ou mantido.

Vários atributos podem ser aplicados ao mesmo elemento de destino.

12.1 Especificação de atributo

Dica

A notação ~opt~ nas definições de sintaxe indica que a entidade lexical é opcional na sintaxe.

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

Um atributo consiste em um attribute-name e uma lista opcional de argumentos posicionais e nomeados. Os argumentos posicionais (se houver) precedem os argumentos nomeados. Um argumento nomeado consiste em um simple-name, opcionalmente seguido por um sinal de igual e seguido por uma expressão. Se a expressão for omitida, o valor $true será presumido.

O attribute-name é um tipo de atributo reservado (seção 12.3) ou algum tipo de atributo definido pela implementação.

12.2 Instâncias de atributo

Uma instância de atributo é um objeto de um tipo de atributo. A instância representa um atributo em tempo de execução.

Para criar um objeto de algum tipo de atributo A, use a notação A(). Um atributo é declarado delimitando sua instância dentro de [], como em [A()]. Alguns tipos de atributo têm parâmetros posicionais e nomeados (seção 8.14), assim como as funções e os cmdlets. Por exemplo,

[A(10,IgnoreCase=$true)]

mostra uma instância do tipo A que está sendo criada usando um parâmetro posicional cujo valor de argumento é 10 e um parâmetro nomeado, IgnoreCase, cujo valor de argumento é $true.

12.3 Atributos reservados

Os atributos descritos nas seções a seguir podem ser usados para aumentar ou modificar o comportamento de funções, filtros, scripts e cmdlets do PowerShell.

12.3.1 O atributo Alias

Esse atributo é usado em um script-parameter para especificar um nome alternativo para um parâmetro. Um parâmetro pode ter vários aliases e cada nome de alias deve ser exclusivo em uma parameter-list. Como exemplo, é possível ter nomes diferentes para um parâmetro em conjuntos de parâmetros diferentes (veja ParameterSetName).

O argumento do atributo tem tipo string[].

Considere uma chamada de função Test1 que tenha o seguinte bloco param e que é chamada conforme mostrado:

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

Considere uma chamada de função Test2 que tenha o seguinte bloco param e que é chamada conforme mostrado:

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

O cmdlet Get-ChildItem (alias Dir) adiciona ao objeto que retorna uma nova NoteProperty do tipo string, chamada PSPath.

12.3.2 O atributo AllowEmptyCollection

Esse atributo é usado em um script-parameter para permitir uma coleção vazia como o argumento de um parâmetro obrigatório.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo AllowEmptyString

Esse atributo é usado em um script-parameter para permitir uma cadeia de caracteres vazia como o argumento de um parâmetro obrigatório.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo AllowNull

Esse atributo é usado em um script-parameter para permitir $null como o argumento de um parâmetro obrigatório para o qual não haja nenhuma conversão implícita disponível.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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

Observe que o segundo caso acima não precisa desse atributo; já há uma conversão implícita de $null para int.

12.3.5 O atributo CmdletBinding

Esse atributo é usado na attribute-list do param-block de uma função para indicar que a função atua de modo semelhante a um cmdlet. Especificamente, ele permite que as funções acessem vários métodos e propriedades por meio da variável $PsCmdlet usando os blocos nomeados begin, process e end (seção 8.10.7).

Quando esse atributo está presente, argumentos posicionais que não têm parâmetros posicionais correspondentes causam falha na associação de parâmetros e $args não é definido. (Sem esse atributo, o $args assumiria qualquer valor de argumento posicional sem correspondência).

Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
SupportsShouldProcess (nomeado)

Tipo: bool; Valor padrão: $false

Especifica se a função dá suporte a chamadas para o método ShouldProcess, que é usado para solicitar informações do usuário antes que a função faça uma alteração no sistema. Um valor de $true indica que ela dá suporte. Um valor $false indica que não.

ConfirmImpact (nomeado)

Tipo: cadeia de caracteres; Valor padrão: "Médio"

Especifica o nível de impacto da ação executada. A chamada ao método ShouldProcess exibirá um prompt de confirmação somente quando o argumento ConfirmImpact for maior ou igual ao valor da variável de preferência $ConfirmPreference.

Os valores possíveis desse argumento são:

Nenhum: suprimir todas as solicitações de confirmação.

Baixo: a ação executada tem um baixo risco de perda de dados.

Médio: a ação executada tem um risco médio de perda de dados.

Alto: a ação executada tem um risco médio de perda de dados.

O valor de $ConfirmPreference pode ser definido para que somente cmdlets com um nível de impacto igual ou superior possam solicitar confirmação antes de executarem sua operação. Por exemplo, se $ConfirmPreference for definido como Médio, os cmdlets com um nível de impacto Médio ou Alto poderão solicitar confirmação. As solicitações de cmdlets com um nível de impacto baixo serão suprimidas.

DefaultParameterSetName (nomeado)

Tipo: cadeia de caracteres; Valor padrão: "__AllParameterSets"

Especifica o conjunto de parâmetros a ser usado, se não for possível determinar por meio dos argumentos. Confira o argumento nomeado ParameterSetName no atributo Parameter ([seção 12.3.7][seção 12.3.7]).

PositionalBinding (nomeado)

Tipo: bool; Valor padrão: $true

Especifica se há suporte para a associação posicional ou não. O valor desse argumento será ignorado se algum parâmetro especificar valores não padrão para o argumento nomeado Position ou o argumento nomeado ParameterSetName no atributo Parameter ([seção 12.3.7][seção 12.3.7]). Caso contrário, se o argumento for $false, nenhum parâmetro será posicional; de outro modo, os parâmetros receberão uma posição com base na ordem em que os parâmetros forem especificados.

Veja um exemplo da estrutura para usar este atributo:

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

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

12.3.6 O atributo OutputType

Esse atributo é usado na attribute-list de param-block para especificar os tipos retornados. Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
Tipo (posição 0)

Tipo: string[] ou matriz de literais de tipo

Uma lista dos tipos dos valores retornados.

ParameterSetName (nomeado)

Tipo: string[]

Especifica os conjuntos de parâmetros que retornam os tipos indicados pelos elementos correspondentes do parâmetro Type.

Aqui estão vários exemplos de uso desse atributo:

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

12.3.7 O atributo Parameter

Esse atributo é usado em um script-parameter. Os seguintes argumentos nomeados são usados para definir as características do parâmetro :

Parâmetro Finalidade
HelpMessage (nomeado)

Type: string

Esse argumento especifica uma mensagem que deve conter uma breve descrição do parâmetro. Essa mensagem é usada na forma definida pela implementação quando a função ou o cmdlet é executado, ainda que um parâmetro obrigatório que tem uma HelpMessage não tenha o argumento correspondente.

O exemplo a seguir mostra uma declaração de parâmetro que fornece uma descrição do parâmetro.

param ( [Parameter(Mandatory = $true,
HelpMessage = "An array of computer names.")]
[string[]] $ComputerName )

Windows PowerShell: se um parâmetro necessário não for fornecido, o runtime solicitará ao usuário um valor de parâmetro. A caixa de diálogo do aviso inclui o texto HelpMessage.

Mandatory (nomeado)

Tipo: bool; Valor padrão: $false

Esse argumento especifica se o parâmetro é necessário dentro do conjunto de parâmetros fornecido (veja o argumento ParameterSetName abaixo). O valor $true indica que é necessário. O valor $false indica que não é.

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

Windows PowerShell: se um parâmetro necessário não for fornecido, o runtime solicitará ao usuário um valor de parâmetro. A caixa de diálogo do aviso inclui o texto HelpMessage, se houver.

ParameterSetName (nomeado)

Tipo: cadeia de caracteres; Valor padrão: "__AllParameterSets"

É possível escrever uma única função ou um cmdlet que execute ações diferentes em cenários diferentes. Isso é feito por meio da exposição de diferentes grupos de parâmetros, dependendo da ação que se deseja executar. Esses agrupamentos de parâmetros são chamados de conjuntos de parâmetros.

O argumento ParameterSetName especifica o conjunto de parâmetros ao qual um parâmetro pertence. Esse comportamento significa que cada conjunto de parâmetros deve ter um parâmetro exclusivo que não seja membro de nenhum outro conjunto de parâmetros.

No caso de parâmetros que pertencem a vários conjuntos de parâmetros, adicione um atributo Parameter para cada conjunto de parâmetros. Isso permite que o parâmetro seja definido de maneira diferente para cada conjunto de parâmetros.

Um conjunto de parâmetros que contém vários parâmetros posicionais deve definir posições exclusivas para cada parâmetro. Dois parâmetros posicionais não podem especificar a mesma posição.

Se nenhum conjunto de parâmetros for especificado para um parâmetro, o parâmetro pertencerá a todos os conjuntos de parâmetros.

Quando vários conjuntos de parâmetros são definidos, o argumento nomeado DefaultParameterSetName do atributo CmdletBinding ([seção 12.3.5][seção 12.3.5]) é usado para especificar o conjunto de parâmetros padrão. O runtime usará o parâmetro padrão definido se ele não puder determinar o conjunto de parâmetros a ser usado com base nas informações fornecidas pelo comando ou vai gerar uma exceção se nenhum conjunto de parâmetros padrão tiver sido especificado.

O exemplo a seguir mostra uma função Test com uma declaração de parâmetro de dois parâmetros que pertencem a dois conjuntos de parâmetros diferentes e um terceiro parâmetro que pertence a ambos os conjuntos:

param ( [Parameter(Mandatory = $true,
ParameterSetName = "Computer")]
[string[]] $ComputerName,

[Parameter(Mandatory = $true,
ParameterSetName = "User")]
[string[]] $UserName,

[Parameter(Mandatory = $true,
ParameterSetName = "Computer")]
[Parameter(ParameterSetName = "User")]
[int] $SharedParam = 5 )

if ($PsCmdlet.ParameterSetName -eq "Computer")
{
# handle "Computer" parameter set
}

elseif ($PsCmdlet.ParameterSetName -eq "User")
{
# handle "User" parameter set
}

}

Test -ComputerName "Mars","Venus" -SharedParam 10
Test -UserName "Mary","Jack"
Test -UserName "Mary","Jack" -SharedParam 20

Position (nomeado)

Tipo: int

Esse argumento especifica a posição do parâmetro na lista de argumentos. Se esse argumento não for especificado, o nome do parâmetro ou seu alias deverá ser especificado explicitamente quando o parâmetro for definido. Se nenhum dos parâmetros de uma função tiver posições, as posições serão atribuídas a cada parâmetro com base na ordem em que forem recebidos.

O exemplo a seguir mostra a declaração de um parâmetro cujo valor deverá ser especificado como o primeiro argumento quando a função for chamada.

param ( [Parameter(Position = 0)]
[string[]] $ComputerName )

ValueFromPipeline (nomeado)

Tipo: bool; Valor padrão: $false

Esse argumento especifica se o parâmetro aceita entrada de um objeto de pipeline. Um valor de $true indica que ele aceita. O valor $false indica que não.

Especifique $true se a função ou o cmdlet acessar o objeto completo, não apenas uma propriedade do objeto.

Somente um parâmetro em um conjunto de parâmetros pode declarar ValueFromPipeline como $true.

O exemplo a seguir mostra a declaração de parâmetro de um parâmetro obrigatório, $ComputerName, que aceita o objeto de entrada que é passado para a função por meio do pipeline.

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

Para ver um exemplo de como usar esse parâmetro em conjunto com o atributo Alias, confira [seção 12.3.1][seção 12.3.1].

ValueFromPipelineByPropertyName (nomeado)

Tipo: bool; Valor padrão: $false

Esse argumento especifica se o parâmetro recebe seu valor de uma propriedade de um objeto de pipeline que tem o mesmo nome ou o mesmo alias que esse parâmetro. Um valor de $true indica que ele aceita. O valor $false indica que não.

Especifique $true se as seguintes condições forem verdadeiras: o parâmetro acessa uma propriedade do objeto com pipe e a propriedade tem o mesmo nome que o parâmetro ou a propriedade tem o mesmo alias que o parâmetro.

Um parâmetro com ValueFromPipelineByPropertyName definido como $true não precisa ter um parâmetro no mesmo conjunto com ValueFromPipeline definido como $true.

Se uma função tiver um parâmetro $ComputerName e o objeto de pipe tiver uma propriedade ComputerName, o valor da propriedade ComputerName será atribuído ao parâmetro $ComputerName da função:

param ( [parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[string[]] $ComputerName )

Vários parâmetros em um conjunto de parâmetros podem definir o ValueFromPipelineByPropertyName como $true. Embora um único objeto de entrada não possa ser associado a vários parâmetros, propriedades diferentes nesse objeto de entrada podem estar associadas a parâmetros diferentes.

Ao associar um parâmetro a uma propriedade de um objeto de entrada, o ambiente do runtime vai primeiro procurar uma propriedade com o mesmo nome do parâmetro. Se essa propriedade não existir, o ambiente do runtime procurará aliases desse parâmetro, em ordem de declaração, selecionando o primeiro alias para o qual existir uma propriedade.

function Process-Date
{
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Year,

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

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

process { … }
}

Get-Date | Process-Date

ValueFromRemainingArguments (nomeado)

Tipo: bool; Valor padrão: $false

Esse argumento especifica se o parâmetro aceita todos os argumentos restantes que não estão associados aos parâmetros da função. Um valor de $true indica que ele aceita. O valor $false indica que não.

O exemplo a seguir mostra um parâmetro $others que aceita todos os argumentos restantes do objeto de entrada que é passado para a função Test:

param ( [parameter(Mandatory = $true)][int] $p1,
[parameter(Mandatory = $true)][int] $p2,
[parameter(ValueFromRemainingArguments = $true)]
[string[]] $others )

Test 10 20 # $others has Length 0
Test 10 20 30 40 # $others has Length 2, value 30,40

Uma implementação também pode definir outros atributos.

Os seguintes atributos também são fornecidos:

  • HelpMessageBaseName: especifica o local em que residem os identificadores de recurso. Por exemplo, esse parâmetro pode especificar um assembly de recurso que contém mensagens de Ajuda que devem ser localizadas.
  • HelpMessageResourceId: especifica o identificador de recurso de uma mensagem de Ajuda.

12.3.8 O atributo PSDefaultValue

Esse atributo é usado em um script-parameter para fornecer informações adicionais sobre o parâmetro. O atributo é usado de uma forma definida pela implementação. Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
Help (nomeado)

Type: string

Esse argumento especifica uma mensagem que deve conter uma breve descrição do valor padrão de um parâmetro. Essa mensagem é usada de uma forma definida pela implementação.

Windows PowerShell: a mensagem é usada como parte da descrição do parâmetro para o tópico de ajuda exibido pelo cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help).

Value (nomeado)

Tipo: object

Esse argumento especifica um valor que se destina a ser o valor padrão de um parâmetro. O valor é usado de uma forma definida pela implementação.

Windows PowerShell: o valor é usado como parte da descrição do parâmetro para o tópico de ajuda exibido pelo cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help) quando a propriedade Help não é especificada.

12.3.9 O atributo SupportsWildcards

Esse atributo é usado em um script-parameter para fornecer informações adicionais sobre o parâmetro. O atributo é usado de uma forma definida pela implementação.

Esse atributo é usado como parte da descrição do parâmetro para o tópico de ajuda exibido pelo cmdlet Get-Help.

12.3.10 O atributo ValidateCount

Esse atributo é usado em um script-parameter para especificar o número mínimo e máximo de valores de argumento que o parâmetro pode aceitar. Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
MinLength (posição 0)

Tipo: int

Esse argumento especifica o número mínimo de valores de argumento permitidos.

MaxLength (posição 1)

Tipo: int

Esse argumento especifica o número máximo de valores de argumento permitidos.

Na ausência desse atributo, a lista de valores de argumento correspondente do parâmetro poderá ter qualquer tamanho.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo ValidateLength

Esse atributo é usado em um script-parameter ou variable para especificar o comprimento mínimo e máximo do argumento do parâmetro, que deve ter tipo string. Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
MinLength (posição 0)

Tipo: int

Esse argumento especifica o número mínimo de caracteres permitidos.

MaxLength (posição 1)

Tipo: int

Esse argumento especifica o número máximo de caracteres permitidos.

Na ausência desse atributo, o argumento correspondente do parâmetro poderá ter qualquer tamanho.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo ValidateNotNull

Esse atributo é usado em um script-parameter ou variable para especificar que o argumento do parâmetro não pode ser $null nem ser uma coleção que contenha um elemento com valor nulo.

Considere uma chamada de função Test que tem o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo ValidateNotNullOrEmpty

Esse atributo é usado em um script-parameter ou variable para especificar que o argumento do parâmetro não pode ser $null, uma cadeia de caracteres vazia, uma matriz vazia e nem ser uma coleção que contenha um elemento com valor $null ou uma cadeia de caracteres vazia.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo ValidatePattern

Esse atributo é usado em um script-parameter ou variable para especificar uma expressão regular para corresponder ao padrão do argumento do parâmetro. Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
RegexString (posição 0)

Tipo: String

Uma expressão regular que é usada para validar o argumento do parâmetro

Options (nomeado)

Tipo: Regular-Expression-Option

Confira [seção 4.2.6.4][seção 4.2.6.4] para ver os valores permitidos.

Se o argumento for uma coleção, cada elemento da coleção deverá corresponder ao padrão.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo ValidateRange

Esse atributo é usado em um script-parameter ou variable para especificar os valores mínimo e máximo do argumento do parâmetro. Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
MinRange (posição 0)

Tipo: object

Esse argumento especifica o valor mínimo permitido.

MaxRange (posição 1)

Tipo: object

Esse argumento especifica o valor máximo permitido.

Na ausência desse atributo, não haverá restrição de intervalo.

Considere uma chamada de função Test1 que tenha o seguinte bloco param e que é chamada conforme mostrado:

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

Considere uma chamada de função Test2 que tenha o seguinte bloco param e chamadas:

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

Considere uma chamada de função Test3 que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo ValidateScript

Esse atributo é usado em um script-parameter ou variable para especificar um script que deve ser usado para validar o argumento do parâmetro.

O argumento na posição 1 é uma script-block-expression.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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 O atributo ValidateSet

Esse atributo é usado em um script-parameter ou variable para especificar um conjunto de valores válidos para o argumento do parâmetro. Os seguintes argumentos são usados para definir as características do parâmetro :

Nome do parâmetro Finalidade
ValidValues (posição 0)

Tipo: string[]

O conjunto de valores válidos.

IgnoreCase (nomeado)

Tipo: bool; Valor padrão: $true

Especifica se a diferenciação de maiúsculas e minúsculas deve ser ignorada em parâmetros do tipo cadeia de caracteres.

Se o parâmetro tiver um tipo matriz, cada elemento da matriz de argumentos correspondente deverá corresponder a um elemento do conjunto de valores.

Considere uma chamada de função Test que tenha o seguinte bloco param e que é chamada conforme mostrado:

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