Compartir a través de


Set-StrictMode

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

Sintaxis

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

Description

El Set-StrictMode cmdlet 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 las reglas de codificación que se van a aplicar.

Set-PSDebug -Strict cmdlet activa el modo estricto para el ámbito global. Set-StrictMode afecta solo al ámbito actual y a sus ámbitos secundarios. A continuación, 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 no inicializadas 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 versión 1.0, 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."
$null -eq $string.Month

True

Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month

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 2.0 modo version strict.

Sin el modo de versión 2.0 estricta, el (3,4) valor se interpreta como un único objeto de matriz al que no se agrega nada. 2.0 Con el modo version strict, se interpreta correctamente como sintaxis errónea para enviar dos valores.

Sin versión 2.0, la referencia a la propiedad Month no existente de una cadena devuelve solo $Null. 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 Desactivado, los índices no válidos o fuera de los límites devuelven valores NULL.

# Strict mode is off by default.
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']

True
True

Set-StrictMode -Version 3.0
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']

Index was outside the bounds of the array.
At line:1 char:1
+ $null -eq $a[2]
+ ~~~~~~~~~~~~~~~
    + 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
+ $null -eq $a['abc']
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

Con el modo strict establecido en 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.

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Version

Especifica las condiciones que provocan un error en modo strict. Este parámetro acepta cualquier número de versión de PowerShell válido. Cualquier número mayor que 3 se trata como Latest. El valor proporcionado debe ser la cadena Latest o una cadena que se puede convertir a un tipo System.Version . La versión debe coincidir con una versión de versión válida de PowerShell.

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.
  • Latest
    • 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.

Precaución

El uso Latest de para la versión en scripts no es determinista. El significado de Latest puede cambiar en las nuevas versiones de PowerShell. Un script escrito para una versión anterior de PowerShell que usa Set-StrictMode -Version Latest está sujeto a reglas más restrictivas cuando se ejecuta en una versión más reciente de PowerShell.

Tipo:Version
Alias:v
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

None

No se pueden canalizar objetos a este cmdlet.

Salidas

None

Este cmdlet no devuelve ningún resultado.

Notas

Aunque el parámetro Version acepta valores mayores que 3.0, no hay reglas adicionales definidas para nada más alto que 3.0.

Set-StrictMode solo es eficaz 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.