Compartir a través de


12. Atributos

Nota editorial

Importante

La especificación del lenguaje de Windows PowerShell 3.0 se publicó en diciembre de 2012 y se basa en Windows PowerShell 3.0. Esta especificación no refleja el estado actual de PowerShell. No hay ningún plan para actualizar esta documentación para reflejar el estado actual. Esta documentación se presenta aquí para obtener referencia histórica.

El documento de especificación está disponible como un documento de Microsoft Word del Centro de descarga de Microsoft en: https://www.microsoft.com/download/details.aspx?id=36389 Ese documento de Word se ha convertido para su presentación aquí en Microsoft Learn. Durante la conversión, se han realizado algunos cambios editoriales para dar cabida al formato de la plataforma Docs. Se han corregido algunos errores tipográficos y menores.

Un objeto de atributo asocia información del sistema predefinida con un elemento de destino , que puede ser un bloque de parámetros o un parámetro (§8.10). Cada objeto de atributo tiene un tipo de atributo .

La información proporcionada por un atributo también se conoce como metadatos . Los metadatos se pueden examinar mediante el comando o el entorno de ejecución para controlar cómo el comando procesa los datos o antes de ejecutarlos por herramientas externas para controlar cómo se procesa o mantiene el propio comando.

Se pueden aplicar varios atributos al mismo elemento de destino.

Especificación de atributo 12.1

Sugerencia

La notación ~opt~ en las definiciones de sintaxis indica que la entidad léxica es opcional en la sintaxis.

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

Un atributo consta de un nombre de atributo y una lista opcional de argumentos posicionales y con nombre. Los argumentos posicionales (si los hay) preceden a los argumentos con nombre. Un argumento con nombre consta de un nombre simple, seguido opcionalmente de un signo igual y de una expresión. Si se omite la expresión, se asume el valor $true.

El nombre de atributo es un tipo de atributo reservado (§12.3) o algún tipo de atributo definido por la implementación.

12.2 Instancias de atributo

Una instancia de atributo es un objeto de un tipo de atributo. La instancia representa un atributo en tiempo de ejecución.

Para crear un objeto de algún tipo de atributo A, use la notación A(). Un atributo se declara mediante la inclusión de su instancia dentro de [], como en [A()]. Algunos tipos de atributos tienen parámetros posicionales y con nombre (§8.14), al igual que las funciones y los cmdlets. Por ejemplo

[A(10,IgnoreCase=$true)]

muestra una instancia del tipo y de tipo que se crea mediante un parámetro posicional con un valor de argumento de 10 y un parámetro con nombre, IgnoreCase, cuyo valor de argumento es $true.

12.3 Atributos reservados

Los atributos descritos en las secciones siguientes se pueden usar para aumentar o modificar el comportamiento de las funciones, filtros, scripts y cmdlets de PowerShell.

12.3.1 El atributo Alias

Este atributo se usa en un parámetro de script para especificar un nombre alternativo para un parámetro. Un parámetro puede tener varios alias y cada nombre de alias debe ser único dentro de un lista de parámetros. Un posible uso es tener nombres diferentes para un parámetro en distintos conjuntos de parámetros (vea ParameterSetName).

El argumento de atributo tiene cadena de tipo[].

Considere una llamada de función Test1 que tenga el siguiente bloque param y al que se llama como se muestra:

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 una llamada de función Test2 que tenga el siguiente bloque param y al que se llama como se muestra:

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

El cmdlet Get-ChildItem (alias Dir) agrega al objeto y devuelve un elemento NoteProperty nuevo de tipo string, denominado PSPath.

12.3.2 AllowEmptyCollection (atributo)

Este atributo se usa en un parámetro de script para permitir una colección vacía como argumento de un parámetro obligatorio.

Considere una llamada de función Test que tenga el siguiente bloque param y al que se llama como se muestra:

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

Este atributo se usa en un parámetro de script para permitir una cadena vacía como argumento de un parámetro obligatorio.

Considere una llamada de función Test que tenga el siguiente bloque param y al que se llama como se muestra:

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

Este atributo se usa en un parámetro de script para permitir $null como argumento de un parámetro obligatorio para el que no hay ninguna conversión implícita disponible.

Considere una llamada de función Test que tiene el siguiente bloque de parámetros y a la que se llama tal como se muestra:

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

Tenga en cuenta que el segundo caso anterior no necesita este atributo; ya hay una conversión implícita de $null a int.

12.3.5 El atributo CmdletBinding

Este atributo se usa en la lista de atributos del bloque de parámetros de una función para indicar que la función actúa de forma similar a un cmdlet. En concreto, permite que las funciones accedan a varios métodos y propiedades a través de la variable $PsCmdlet mediante bloques con nombre begin, process y end (§8.10.7).

Cuando este atributo está presente, los argumentos posicionales que no tienen parámetros posicionales coincidentes provocan un error en el enlace de parámetros y $args no se definen. (Sin este atributo $args tomaría cualquier valor de argumento posicional no coincidente).

Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro El propósito
SupportsShouldProcess (con nombre)

Tipo: bool; Valor predeterminado: $false

Especifica si la función admite llamadas al método ShouldProcess, que se usa para pedir al usuario comentarios antes de que la función realice un cambio en el sistema. Un valor de $true indica que lo hace. Un valor de $false indica que no lo hace.

ConfirmImpact (con nombre)

Tipo: cadena; Valor predeterminado: "Medium"

Especifica el nivel de impacto de la acción realizada. La llamada al método ShouldProcess muestra un mensaje de confirmación solo cuando el argumento ConfirmImpact es mayor o igual que el valor de la variable de preferencia $ConfirmPreference.

Los valores posibles de este argumento son:

Ninguno: suprima todas las solicitudes de confirmación.

Bajo: la acción realizada tiene un riesgo bajo de perder datos.

Medio: la acción realizada tiene un riesgo medio de perder datos.

Alto: la acción realizada tiene un alto riesgo de perder datos.

El valor de $ConfirmPreference se puede establecer para que solo los cmdlets con un nivel de impacto igual o superior puedan solicitar confirmación antes de realizar su operación. Por ejemplo, si $ConfirmPreference se establece en Medium, los cmdlets con un nivel de impacto medio o alto pueden solicitar confirmación. Se suprimen las solicitudes de cmdlets con un nivel de impacto bajo.

DefaultParameterSetName (con nombre)

Tipo: cadena; Valor predeterminado: "__AllParameterSets"

Especifica el conjunto de parámetros que se va a usar si no se puede determinar a partir de los argumentos. Vea el argumento con nombre ParameterSetName en el atributo Parameter ([§12.3.7][§12.3.7]).

PositionalBinding (con nombre)

Tipo: bool; Valor predeterminado: $true

Especifica si se admite o no el enlace posicional. El valor de este argumento se omite si alguno de los parámetros especifica valores no predeterminados para el argumento con nombre Position o el argumento con nombre ParameterSetName en el atributo Parameter ([§12.3.7][§12.3.7]). De lo contrario, si el argumento es $false, no hay parámetros posicionales; de lo contrario, se asigna una posición basada en el orden en que se especifican los parámetros.

Este es un ejemplo del marco para usar este atributo:

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

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

12.3.6 El atributo OutputType

Este atributo se utiliza en la lista de atributos del bloque de parámetros para especificar los tipos que se devuelven. Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro Propósito
Tipo (posición 0)

Tipo: string[] o matriz de literales de tipo

Lista de los tipos de los valores que se devuelven.

ParameterSetName (con nombre)

Tipo: string[]

Especifica los conjuntos de parámetros que devuelven los tipos indicados por los elementos correspondientes del parámetro Type.

Estos son varios ejemplos del uso de este atributo:

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

12.3.7 El atributo Parameter

Este atributo se utiliza en un parámetro de script . Los argumentos con nombre siguientes se usan para definir las características del parámetro :

Parámetro Propósito
HelpMessage (con nombre)

Tipo: cadena

Este argumento especifica un mensaje destinado a contener una breve descripción del parámetro. Este mensaje se usa de manera definida por la implementación cuando se ejecuta la función o el cmdlet y un parámetro obligatorio que tiene un HelpMessage no tiene un argumento correspondiente.

En el ejemplo siguiente se muestra una declaración de parámetro que proporciona una descripción del parámetro .

parámetro ( [Parameter(Mandatory = $true,
HelpMessage = "Una matriz de nombres de equipo".)]
[string[]] $ComputerName )

Windows PowerShell: si no se proporciona un parámetro necesario, el tiempo de ejecución solicita al usuario un valor de parámetro. El cuadro de diálogo de solicitud incluye el texto "HelpMessage".

Obligatorio (con nombre)

Tipo: bool; Valor predeterminado: $false

Este argumento especifica si el parámetro es necesario dentro del conjunto de parámetros especificado (consulte el argumento ParameterSetName siguiente). Un valor de $true indica que ello es así. Un valor de $false indica que no lo es.

parámetro ( [Parameter(Mandatory = $true)]
[string[]] $ComputerName )

Windows PowerShell: si no se proporciona un parámetro necesario, el tiempo de ejecución solicita al usuario un valor de parámetro. El cuadro de diálogo de la solicitud incluye el texto HelpMessage, si lo hay.

ParameterSetName (con nombre)

Tipo: cadena; Valor predeterminado: "__AllParameterSets"

Es posible escribir una sola función o cmdlet que pueda realizar diferentes acciones para distintos escenarios. Para ello, expone diferentes grupos de parámetros en función de la acción que quiera realizar. Estos grupos de parámetros se denominan conjuntos de parámetros .

El argumento ParameterSetName especifica el conjunto de parámetros al que pertenece un parámetro. Este comportamiento significa que cada conjunto de parámetros debe tener un parámetro único que no sea miembro de ningún otro conjunto de parámetros.

Para los parámetros que pertenecen a varios conjuntos de parámetros, agregue un atributo Parameter para cada conjunto de parámetros. Esto permite definir el parámetro de forma diferente para cada conjunto de parámetros.

Un conjunto de parámetros que contiene varios parámetros posicionales debe definir posiciones únicas para cada parámetro. Ningún parámetro posicional puede especificar la misma posición.

Si no se especifica ningún conjunto de parámetros para un parámetro, el parámetro pertenece a todos los conjuntos de parámetros.

Cuando se definen varios conjuntos de parámetros, se usa el argumento con nombre DefaultParameterSetName del atributo CmdletBinding ([§12.3.5][§12.3.5]) para especificar el conjunto de parámetros predeterminado. El tiempo de ejecución usa el conjunto de parámetros predeterminado si no puede determinar el conjunto de parámetros que se va a usar en función de la información proporcionada por el comando o genera una excepción si no se ha especificado ningún conjunto de parámetros predeterminado.

En el ejemplo siguiente se muestra una función Test con una declaración de parámetros de dos parámetros que pertenecen a dos conjuntos de parámetros diferentes y un tercer parámetro que pertenece a ambos conjuntos:

parámetro ( [Parameter(Mandatory = $true,
ParameterSetName = "Equipo")]
[string[]] $ComputerName,

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

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

if ($PsCmdlet.ParameterSetName -eq "Equipo")
{
# gestionar el conjunto de parámetros "Computer"
}

elseif ($PsCmdlet.ParameterSetName -eq "Usuario")
{
# gestionar el conjunto de parámetros "User"
}

}

Prueba -ComputerName "Marte", "Venus" -SharedParam 10
Prueba -UserName "Mary","Jack"
Prueba -UserName "Mary","Jack" -SharedParam 20

Posición (denominada)

Tipo: int

Este argumento especifica la posición del parámetro en la lista de argumentos. Si no se especifica este argumento, el nombre del parámetro o su alias se deben especificar explícitamente cuando se establece el parámetro. Si ninguno de los parámetros de una función tiene posiciones, las posiciones se asignan a cada parámetro en función del orden en el que se reciben.

En el ejemplo siguiente se muestra la declaración de un parámetro cuyo valor debe especificarse como primer argumento cuando se llama a la función.

parámetro ( [Parameter(Position = 0)]
[string[]] $ComputerName )

ValueFromPipeline (con nombre)

Tipo: bool; Valor predeterminado: $false

Este argumento especifica si el parámetro acepta la entrada de un objeto de canalización. Un valor de $true indica que lo hace. Un valor de $false indica que no lo hace.

Especifique $true si la función o el cmdlet accede al objeto completo, no solo una propiedad del objeto .

Solo un parámetro de un conjunto de parámetros puede declarar ValueFromPipeline como $true.

En el ejemplo siguiente se muestra la declaración de parámetro de un parámetro obligatorio, $ComputerName, que acepta el objeto de entrada que se pasa a la función desde la canalización.

parámetro ( [Parameter(Mandatory = $true,
ValueFromPipeline=$true)]
[string[]] $ComputerName )

Para obtener un ejemplo de uso de este parámetro junto con el atributo Alias, vea [§12.3.1][§12.3.1].

ValueFromPipelineByPropertyName (con nombre)

Tipo: bool; Valor predeterminado: $false

Este argumento especifica si el parámetro toma su valor de una propiedad de un objeto de canalización que tiene el mismo nombre o el mismo alias que este parámetro. Un valor de $true indica que lo hace. Un valor de $false indica que no lo hace.

Especifique $true si se cumplen las condiciones siguientes: el parámetro tiene acceso a una propiedad del objeto canalado y la propiedad tiene el mismo nombre que el parámetro o la propiedad tiene el mismo alias que el parámetro .

Un parámetro que tenga ValueFromPipelineByPropertyName establecido en $true no necesita tener un parámetro en el mismo conjunto con ValueFromPipeline establecido en $true.

Si una función tiene un parámetro $ComputerName y el objeto canalizado tiene una propiedad ComputerName, el valor de la propiedad ComputerName se asigna al parámetro $ComputerName de la función:

parámetro ( [parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[string[]] $ComputerName )

Varios parámetros de un conjunto de parámetros pueden definir ValueFromPipelineByPropertyName como $true. Aunque un único objeto de entrada no se puede enlazar a varios parámetros, las distintas propiedades de ese objeto de entrada pueden enlazarse a parámetros diferentes.

Al enlazar un parámetro con una propiedad de un objeto de entrada, el entorno en tiempo de ejecución busca primero una propiedad con el mismo nombre que el parámetro.  Si dicha propiedad no existe, el entorno en tiempo de ejecución busca alias para ese parámetro, en su orden de declaración, seleccionando el primer alias para el que existe una propiedad.

función Process-Date
{
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Año,

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

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

proceso { ... }
}

Get-Date | Process-Date

ValueFromRemainingArguments (con nombre)

Tipo: bool; Valor predeterminado: $false

Este argumento especifica si el parámetro acepta todos los argumentos restantes que no están enlazados a los parámetros de la función. Un valor de $true indica que lo hace. Un valor de $false indica que no lo hace.

En el ejemplo siguiente se muestra un parámetro $others que acepta todos los argumentos restantes del objeto de entrada que se pasa a la función Test:

parámetro ( [parameter(Mandatory = $true)][int] $p 1,
[parameter(Mandatory = $true)][int] $p2,
[parameter(ValueFromRemainingArguments = $true)]
[string[]] $others )

La prueba 10 20 # $others tiene longitud 0
La prueba 10 20 30 40 # $others tiene longitud 2, valor 30 40

Una implementación también puede definir otros atributos.

También se proporcionan los siguientes atributos:

  • HelpMessageBaseName: especifica la ubicación donde residen los identificadores de recursos. Por ejemplo, este parámetro podría especificar un ensamblado de recursos que contenga mensajes de Ayuda que se van a localizar.
  • HelpMessageResourceId: especifica el identificador de recurso de un mensaje de Ayuda.

12.3.8 El atributo PSDefaultValue

Este atributo se utiliza en un parámetro de script para proporcionar información adicional sobre el parámetro. El atributo se usa de forma definida por la implementación. Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro Propósito
Help (con nombre)

Tipo: cadena

Este argumento especifica un mensaje destinado a contener una breve descripción del valor predeterminado de un parámetro. Este mensaje se usa de una manera definida por la implementación.

Windows PowerShell: el mensaje se usa como parte de la descripción del parámetro para el tema de ayuda mostrado por el cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help).

Value (con nombre)

Tipo: objeto

Este argumento especifica un valor destinado a ser el valor predeterminado de un parámetro. El valor se usa de forma definida por la implementación.

Windows PowerShell: el valor se usa como parte de la descripción del parámetro para el tema de ayuda mostrado por el cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help)cuando no se especifica la propiedad Help.

12.3.9 El atributo SupportsWildcards

Este atributo se usa en un parámetro de script para proporcionar información adicional sobre el parámetro. El atributo se usa de forma definida por la implementación.

Este atributo se usa como parte de la descripción del parámetro para el tema de ayuda que muestra el cmdlet Get-Help.

12.3.10 El atributo ValidateCount

Este atributo se usa en un parámetro de script para especificar el número mínimo y máximo de valores de argumento que el parámetro puede aceptar. Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro Propósito
MinLength (posición 0)

Tipo: int

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

MaxLength (posición 1)

Tipo: int

Este argumento especifica el número máximo de valores de argumento permitidos.

En ausencia de este atributo, la lista de valores de argumento correspondiente del parámetro puede tener cualquier longitud.

Considere una llamada de función Test que tenga el siguiente bloque de parámetros y al que se llama como se muestra:

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

Este atributo se usa en un parámetro de script o variable para especificar la longitud mínima y máxima del argumento del parámetro, que debe tener una cadena de tipo. Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro Propósito
MinLength (posición 0)

Tipo: int

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

MaxLength (posición 1)

Tipo: int

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

En ausencia de este atributo, el argumento correspondiente del parámetro puede tener cualquier longitud.

Considere una llamada de función Test que tenga el siguiente bloque de parámetros y al que se llama como se muestra más abajo.

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

Este atributo se usa en un parámetro de script o variable para especificar que el argumento del parámetro no puede ser $null o una colección que contenga un elemento con valores NULL.

Considere una llamada de función Test que tenga el siguiente bloque de parámetros y que se llama como `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 El atributo ValidateNotNullOrEmpty

Este atributo se usa en un parámetro de script o variable para especificar que el argumento del parámetro no puede ser $null, una cadena vacía o una matriz vacía, o una colección que contiene un elemento de cadena vacía o con valores $null.

Considere una llamada de función Test que tenga el siguiente bloque param y al que se llama como se muestra:

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

Este atributo se usa en un parámetro de script o variable a fin de especificar una expresión regular para que coincida con el patrón del argumento del parámetro. Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro Propósito
RegexString (posición 0)

Escriba: String

Expresión regular que se usa para validar el argumento del parámetro

Opciones (denominadas)

Tipo: Normal-Expression-Option

Consulte [§4.2.6.4][§4.2.6.4] para ver los valores permitidos.

Si el argumento es una colección, cada elemento de la colección debe coincidir con el patrón.

Considere una llamada de función Test que tenga el siguiente bloque param y al que se llama como se muestra:

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

Este atributo se usa en un parámetro de script o variable para especificar los valores máximos y mínimos del argumento del parámetro. Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro Propósito
MinRange (posición 0)

Tipo: objeto

Este argumento especifica el valor mínimo permitido.

MaxRange (posición 1)

Tipo: objeto

Este argumento especifica el valor máximo permitido.

En ausencia de este atributo, no hay ninguna restricción de intervalo.

Considere una llamada de función Test1 que tenga el siguiente bloque param y al que se llama como se muestra:

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 una llamada de función Test2 que tiene el bloque de parámetros y las llamadas siguientes:

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 una llamada de función Test3 que tenga el siguiente bloque param y al que se llama como se muestra:

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

Este atributo se utiliza en un parámetro de script o una variable para especificar un script que se empleará para validar el argumento del parámetro.

El argumento de la posición 1 es una expresión de bloque de script.

Considere una llamada de función Test que tenga el siguiente bloque param y al que se llama como se muestra:

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

Este atributo se usa en un parámetro de script o variable a fin de especificar un conjunto de valores válidos para el argumento del parámetro. Los argumentos siguientes se usan para definir las características del parámetro :

Nombre del parámetro Propósito
ValidValues (posición 0)

Tipo: string[]

Conjunto de valores válidos.

IgnoreCase (con nombre)

Tipo: bool; Valor predeterminado: $true

Especifica si se debe omitir el uso de mayúsculas y minúsculas para los parámetros de tipo string.

Si el parámetro tiene un tipo de matriz, cada elemento de la matriz de argumentos correspondiente debe coincidir con un elemento del conjunto de valores.

Considere una llamada de función Test que tenga el siguiente bloque param y al que se llama como se muestra:

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