Compartilhar via


12. Atributos

Nota editorial

Importante

O Windows PowerShell Language Specification 3.0 foi publicado em dezembro de 2012 e é baseado no Windows PowerShell 3.0. Esta especificação não reflete o estado atual do PowerShell. Não há nenhum plano para atualizar esta documentação para refletir o estado atual. Esta documentação é apresentada aqui para referência histórica.

O documento de especificação está disponível como um documento do Microsoft Word no Centro de Download da Microsoft em: https://www.microsoft.com/download/details.aspx?id=36389 Esse documento do Word foi convertido para apresentação aqui no Microsoft Learn. Durante a conversão, algumas alterações editoriais foram feitas para acomodar a formatação da plataforma do Documentos. Alguns erros de digitação e pequenos erros foram corrigidos.

Um objeto de atributo associa informações predefinidas do sistema a um elemento de destino , que pode ser um bloco de parâmetros ou um parâmetro (§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 tempo de execução por ferramentas externas para controlar como o próprio comando é processado ou mantido.

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

12.1 Especificação do atributo

Tip

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 de um nome do atributo e uma lista opcional de argumentos posicionais e com nome. Os argumentos posicionais (se houver) precedem os argumentos nomeados. Um argumento nomeado consiste em um de nome simples, opcionalmente seguido por um sinal de igual e seguido por uma expressão . Se a expressão for omitida, o valor $true será assumido.

O nome do atributo é um tipo de atributo reservado (§12.3) ou algum tipo de atributo definido pela implementação.

12.2 Instâncias de atributos

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 colocando sua instância dentro [], como em [A()]. Alguns tipos de atributos têm parâmetros posicionais e nomeados (§8.14), assim como funções e cmdlets. Por exemplo

[A(10,IgnoreCase=$true)]

mostra uma instância do tipo Um sendo criado 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

Este atributo é usado num script-parâmetro 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 dentro de uma lista de parâmetros . Um uso possível é ter nomes diferentes para um parâmetro em diferentes conjuntos de parâmetros (consulte ParameterSetName).

O argumento do atributo é do tipo string[].

Considere a chamada de função Test1 que tem o seguinte bloco de parâmetros 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 de parâmetros e que seja 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 um novo NoteProperty do tipo string, chamado PSPath.

12.3.2 O atributo AllowEmptyCollection

Esse atributo é usado em um de parâmetro de script 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 de parâmetros e que seja 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 num parâmetro de script para permitir uma string vazia como o argumento de um parâmetro obrigatório.

Considere uma chamada de função Test que tem o seguinte bloco de parâmetros 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

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

Considere uma chamada de função Test que tenha o seguinte bloco de parâmetros e que seja chamada como demonstrado:

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

Note que o segundo caso acima não precisa deste atributo; Já existe uma conversão implícita de $null para int.

12.3.5 O atributo CmdletBinding

Esse atributo é usado no lista de atributos de de bloco de parâmetro de uma função para indicar que a função age de forma semelhante a um cmdlet. Especificamente, ele permite que as funções acessem uma série de métodos e propriedades através da variável $PSCmdlet usando blocos nomeados begin, process e end (§8.10.7).

Quando esse atributo está presente, argumentos posicionais que não têm parâmetros posicionais correspondentes fazem com que a vinculação de parâmetros falhe e $args não seja definida. (Sem este atributo, $args assumiria os valores de quaisquer argumentos posicionais não correspondidos.)

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

Nome do parâmetro Objetivo
SupportsShouldProcess (nomeado)

Tipo: bool; Valor padrão: $false

Especifica se a função suporta chamadas para o método ShouldProcess, que é usado para solicitar comentários ao usuário antes que a função faça uma alteração no sistema. Um valor de $true indica que sim. Um valor de $false indica que não.

ConfirmImpact (nomeado)

Tipo: string; Valor padrão: "Médio"

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

Os valores possíveis deste argumento são:

Nenhum: Suprima todos os pedidos de confirmação.

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

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

Alto: A ação executada tem um alto risco de perda de dados.

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

DefaultParameterSetName (nomeado)

Tipo: string; Valor padrão: "__AllParameterSets"

Especifica o conjunto de parâmetros a ser usado se isso não puder ser determinado a partir dos argumentos. Veja o argumento nomeado ParameterSetName no atributo Parameter ([§12.3.7][§12.3.7]).

PositionalBinding (nomeado)

Tipo: bool; Valor padrão: $true

Especifica se a vinculação posicional é suportada 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 ([§12.3.7][§12.3.7]). Caso contrário, se o argumento for $false então nenhum parâmetro é posicional, caso contrário, os parâmetros são atribuídos a uma posição com base na ordem em que os parâmetros são especificados.

Aqui está um exemplo da estrutura para usar esse atributo:

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

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

12.3.6 O atributo OutputType

Esse atributo é usado no de lista de atributos de de bloco de parâmetros para especificar os tipos retornados. Os seguintes argumentos são usados para definir as características do parâmetro:

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

Tipo: string[] ou matriz de literais de tipo

Uma lista dos tipos dos valores que são retornados.

ParameterSetName (nomeação)

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 do 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 Objetivo
HelpMessage (nomeado)

Tipo: string

Este argumento especifica uma mensagem que se destina a conter uma breve descrição do parâmetro. Esta mensagem é usada de uma forma definida pela implementação quando a função ou cmdlet é executado, mas um parâmetro obrigatório com uma HelpMessage não possui um argumento correspondente.

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

param ( [Parameter(Obrigatório = $true,
HelpMessage = "Uma matriz de nomes de computador.")]
[string[]] $ComputerName )

Windows PowerShell: Se um parâmetro necessário não for fornecido, o tempo de execução solicitará ao usuário um valor de parâmetro. A caixa de diálogo prompt inclui o texto HelpMessage.

Obrigatório (nomeado)

Tipo: bool; Valor padrão: $false

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

param ( [Parâmetro(Obrigatório = $true)]
[string[]] $ComputerName )

Windows PowerShell: Se um parâmetro necessário não for fornecido, o tempo de execução solicitará ao usuário um valor de parâmetro. A caixa de diálogo prompt inclui o texto HelpMessage, se houver.

ParameterSetName (nomeado)

Tipo: string; Valor padrão: "__AllParameterSets"

É possível escrever uma única função ou cmdlet que pode executar diferentes ações para diferentes cenários. Ele faz isso expondo diferentes grupos de parâmetros dependendo da ação que deseja tomar. Esses agrupamentos de parâmetros são chamados 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.

Para 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 forma 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. Não há dois parâmetros posicionais que possam 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 ([§12.3.5][§12.3.5]) é usado para especificar o conjunto de parâmetros padrão. O tempo de execução usa o conjunto de parâmetros padrão se não puder determinar o conjunto de parâmetros a ser usado com base nas informações fornecidas pelo comando, ou gera 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 ( [Parametro (Obrigatório = $true,
ParameterSetName = "Computador")]
[string[]] $ComputerName,

[Parâmetro(Obrigatório = $true,
ParameterSetName = "Usuário")]
[string[]] $UserName,

[Parâmetro(Obrigatório = $true,
ParameterSetName = "Computador")]
[Parâmetro(ParameterSetName = "Usuário")]
[int] $SharedParam = 5 )

if ($PSCmdlet.ParameterSetName -eq "Computador")
{
# definir conjunto de parâmetros "Computador"
}

elseif ($PSCmdlet.ParameterSetName -eq "Utilizador")
{
# tratar do conjunto de parâmetros "User"
}

}

Teste -ComputerName "Marte","Vênus" -SharedParam 10
Teste -UserName "Mary","Jack"
Teste -UserName "Mary","Jack" -SharedParam 20

Cargo (nomeado)

Tipo: int

Este 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 são atribuídas a cada parâmetro com base na ordem em que são recebidas.

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

param ( [Parâmetro(Posição = 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 sim. Um valor de $false indica que não.

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

Apenas 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 a partir do pipeline.

param ( [Parametro(Obrigatório = $verdadeiro,
ValueFromPipeline=$true)]
[string[]] $ComputerName )

Para obter um exemplo de uso desse parâmetro em conjunto com o atributo Alias, consulte [§12.3.1][§12.3.1].

ValueFromPipelineByPropertyName (nomeado)

Tipo: bool; Valor padrão: $false

Esse argumento especifica se o parâmetro obtém 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 sim. Um valor de $false indica que não.

Especifique $true se as seguintes condições forem verdadeiras: o parâmetro acessa uma propriedade do objeto canalizado, 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 canalizado tiver uma propriedade ComputerName, o valor da propriedade ComputerName será atribuído ao parâmetro $ComputerName da Function:

paramètres ( [Parâmetro(Obrigatório = verdadeiro,
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 vinculado a vários parâmetros, propriedades diferentes nesse objeto de entrada podem ser vinculadas a parâmetros diferentes.

Ao vincular um parâmetro com uma propriedade de um objeto de entrada, o ambiente de tempo de execução primeiro procura uma propriedade com o mesmo nome do parâmetro.  Se tal propriedade não existir, o ambiente de tempo de execução procurará aliases para esse parâmetro, em sua ordem de declaração, escolhendo o primeiro alias para o qual existe uma propriedade.

função Process-Date
{
Parâmetro(
[Parâmetro(ValueFromPipelineByPropertyName=$true)]
[int]$Year,

[Parâmetro(ValueFromPipelineByPropertyName=$true)]
[int]$Month,

[Parâmetro(ValueFromPipelineByPropertyName=$true)]
[int]$Day
)

processo { ... }
}

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 vinculados aos parâmetros da função. Um valor de $true indica que sim. Um valor de $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 ( [Parâmetro(Obrigatório = $true)][int] $p 1,
[Parâmetro(Obrigatório = $true)][int] $p 2,
[Parâmetro(ValorDosArgumentosRestantes = $true)]
[string[]] $Others )

Teste 10 20 # $Others tem comprimento 0
Teste 10 20 30 40 # $Others tem comprimento 2, valor 30,40

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

Os seguintes atributos também são fornecidos:

  • HelpMessageBaseName: Especifica o local onde os identificadores de recursos residem. Por exemplo, este parâmetro pode especificar um assembly de recursos que contenha mensagens de ajuda que devem ser traduzidas.
  • HelpMessageResourceId: Especifica o identificador de recurso para uma mensagem de Ajuda.

12.3.8 O atributo PSDefaultValue

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

Nome do parâmetro Objetivo
Ajuda (nomeado)

Tipo: string

Este argumento especifica uma mensagem que se destina a conter uma breve descrição do valor padrão de um parâmetro. Esta mensagem é usada de uma maneira 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).

Valor (nomeado)

Tipo: objeto

Este argumento especifica um valor que se destina a ser o valor padrão de um parâmetro. O valor é usado de uma maneira 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

Este atributo é usado num parâmetro de script para fornecer informações adicionais sobre o parâmetro. O atributo é usado de uma maneira definida pela implementação.

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

12.3.10 O atributo ValidateCount

Esse atributo é usado em um de parâmetro de script 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 Objetivo
MinLength (posição 0)

Tipo: int

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

MaxLength (posição 1)

Tipo: int

Este 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 pode ser de qualquer comprimento.

Considere uma chamada de função Test que tenha o seguinte bloco de parâmetros e que seja chamada conforme apresentado:

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 de parâmetro de script ou variável para especificar o comprimento mínimo e máximo do argumento do parâmetro, que deve ter cadeia de caracteres de tipo. Os seguintes argumentos são usados para definir as características do parâmetro:

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

Tipo: int

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

MaxLength (posição 1)

Tipo: int

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

Na ausência desse atributo, o argumento correspondente do parâmetro pode ser de qualquer comprimento.

Considere uma função de chamada Test que tenha o seguinte bloco de parâmetros e que seja 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 de parâmetro de script ou variável para especificar que o argumento do parâmetro não pode ser $null ou ser uma coleção contendo um elemento de valor nulo.

Considere uma chamada de função Test que tenha o seguinte bloco de parâmetros e que seja 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 parâmetro de script ou em uma variável para especificar que o argumento não pode ser $null, uma cadeia de caracteres vazia, ou uma matriz vazia, nem uma coleção contendo um elemento com valor $null ou uma cadeia de caracteres vazia.

Considere uma chamada de função Test que tenha o seguinte bloco de parâmetros e que seja chamado 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

Este atributo é usado num(a) de parâmetro de script ou numa variável para especificar uma expressão regular que corresponda 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 Objetivo
RegexString (posição 0)

Tipo: String

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

Opções (nomeadas)

Tipo: Regular-Expression-Option

Ver [§4.2.6.4][§4.2.6.4] para os valores permitidos.

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

Considere uma função de chamada Test que tenha o seguinte bloco de parâmetros e que seja chamada como 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

Este atributo é usado em um parâmetro de script ou em uma variável 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 Objetivo
MinRange (posição 0)

Tipo: objeto

Este argumento especifica o valor mínimo permitido.

MaxRange (posição 1)

Tipo: objeto

Este argumento especifica o valor máximo permitido.

Na ausência deste atributo, não há restrição de intervalo.

Considere uma chamada de função Test1 que tenha o seguinte bloco de parâmetros e que seja 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 inclui o seguinte bloco de parâmetros 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 de parâmetros e que é chamada como 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 parâmetro de script ou variável para especificar um script que deve ser utilizado para validar o argumento do parâmetro.

O argumento na posição 1 é uma expressão de bloco de script .

Considere uma chamada de função Test que tenha o seguinte bloco de parâmetros e que seja chamado 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

Este atributo é utilizado num de parâmetro de script ou numa variável 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 Objetivo
ValidValues (posição 0)

Tipo: string[]

O conjunto de valores válidos.

IgnoreCase (nomeado)

Tipo: bool; Valor padrão: $true

Especifica se as maiúsculas e minúsculas devem ser ignoradas para parâmetros do tipo cadeia de caracteres.

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

Considere uma chamada de função Test que tenha o seguinte bloco de parâmetros e que seja chamado 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