Compartir a través de


Set-StrictMode

Establece y aplica reglas de codificación en expresiones, scripts y bloques de scripts.

Sintaxis

Version (valor predeterminado)

Set-StrictMode
    -Version <Version>
    [<CommonParameters>]

Off

Set-StrictMode
    [-Off]
    [<CommonParameters>]

Description

El cmdlet Set-StrictMode configura el modo estricto para el ámbito actual y todos los ámbitos secundarios, y lo activa y desactiva. Cuando el modo strict está activado, PowerShell genera un error de terminación cuando el contenido de una expresión, un script o un bloque de scripts infringe las reglas básicas de codificación de procedimientos recomendados.

Use el parámetro Version para determinar qué reglas de codificación se aplican.

Set-PSDebug -Strict cmdlet activa el modo estricto para el ámbito global. Set-StrictMode afecta solo al ámbito actual y a sus ámbitos secundarios. Por lo tanto, puede usarlo en un script o una función para invalidar la configuración heredada del ámbito global.

Cuando Set-StrictMode está desactivado, PowerShell tiene los siguientes comportamientos:

  • Se supone que las variables sin inicializar tienen un valor de 0 (cero) o $Null, según el tipo.
  • Las referencias a propiedades no existentes devuelven $Null
  • Los resultados de la sintaxis de función incorrecta varían con las condiciones de error.
  • Si se intenta recuperar un valor mediante un índice no válido en una matriz, se devuelve $Null

Ejemplos

Ejemplo 1: Activar el modo strict como versión 1.0

# Strict mode is off by default.
$a -gt 5
False
Set-StrictMode -Version 1.0
$a -gt 5
The variable $a cannot be retrieved because it has not been set yet.

At line:1 char:3
+ $a <<<<  -gt 5
+ CategoryInfo          : InvalidOperation: (a:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined

Con el modo strict establecido en la versión 1.0, se intenta hacer referencia a variables que no se inicializan.

Ejemplo 2: Activar el modo strict como versión 2.0

# Strict mode is off by default.
function add ($a, $b) {
    '$a = ' + $a
    '$b = ' + $b
    '$a+$b = ' + ($a + $b)
}
add 3 4
$a = 3
$b = 4
$a+$b = 7
add(3,4)
$a = 3 4
$b =
$a+$b = 3 4
Set-StrictMode -Version 2.0
add(3,4)
The function or command was called like a method. Parameters should be separated by spaces,
as described in 'Get-Help about_Parameter.'
At line:1 char:4
+ add <<<< (3,4)
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : StrictModeFunctionCallWithParens
Set-StrictMode -Off
$string = "This is a string."
$string.Month -eq $null
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$string.Month -eq $null
Property 'Month' cannot be found on this object; make sure it exists.
At line:1 char:9
+ $string. <<<< month
+ CategoryInfo          : InvalidOperation: (.:OperatorToken) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFoundStrict

Este comando activa el modo strict y lo establece en la versión 2.0. Como resultado, PowerShell devuelve un error si usa la sintaxis del método , que usa paréntesis y comas, para una llamada de función o referencia a variables no inicializadas o propiedades no existentes.

La salida de ejemplo muestra el efecto del modo strict de la versión 2.0.

Sin el modo strict de la versión 2.0, el valor "(3,4)" se interpreta como un único objeto de matriz al que no se agrega nada. Mediante el modo strict de la versión 2.0, se interpreta correctamente como sintaxis incorrecta para enviar dos valores.

Sin la versión 2.0, la referencia a la propiedad Month existente de una cadena devuelve solo . Con la versión 2.0, se interpreta correctamente como un error de referencia.

Ejemplo 3: Activar el modo strict como versión 3.0

Con el modo strict establecido en Off, los índices no válidos o fuera de los límites devuelven valores NULL.

# Strict mode is off by default.
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
True
True
Set-StrictMode -Version 3
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
Index was outside the bounds of the array.
At line:1 char:1
+ $a[2] -eq $null
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], IndexOutOfRangeException
    + FullyQualifiedErrorId : System.IndexOutOfRangeException

Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $a['abc'] -eq $null
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

Con el modo strict establecido en la versión 3 o superior, los índices no válidos o fuera de los límites producen errores.

Parámetros

-Off

Indica que este cmdlet desactiva el modo estricto para el ámbito actual y todos los ámbitos secundarios.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

Off
Posición:Named
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Version

Especifica las condiciones que provocan un error en modo estricto. Este parámetro acepta cualquier número de versión de PowerShell válido. Cualquier número superior a 3 se trata como Latest.

Los valores efectivos de este parámetro son:

  • 1.0
    • Prohíbe las referencias a variables sin inicializar, excepto las variables sin inicializar en cadenas.
  • 2.0
    • Prohíbe las referencias a variables no inicializadas. Esto incluye variables sin inicializar en cadenas.
    • Prohíbe las referencias a propiedades inexistentes de un objeto.
    • Prohíbe las llamadas de función que usan la sintaxis para llamar a métodos.
  • 3.0
    • Prohíbe las referencias a variables no inicializadas. Esto incluye variables sin inicializar en cadenas.
    • Prohíbe las referencias a propiedades inexistentes de un objeto.
    • Prohíbe las llamadas de función que usan la sintaxis para llamar a métodos.
    • Prohibir los límites o los índices de matriz no reenvibles.
  • Más reciente
    • Selecciona la versión más reciente disponible. La versión más reciente es la más estricta. Use este valor para asegurarse de que los scripts usan la versión más estricta disponible, incluso cuando se agregan nuevas versiones a PowerShell.

Propiedades de parámetro

Tipo:Version
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:v

Conjuntos de parámetros

Version
Posición:Named
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

CommonParameters

Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.

Entradas

None

No se puede canalizar la entrada a este cmdlet.

Salidas

None

Este cmdlet no genera resultados de ningún tipo.

Notas

Set-StrictMode solo es efectivo en el ámbito en el que se establece y en sus ámbitos secundarios. Para obtener más información sobre los ámbitos de PowerShell, consulte about_Scopes.