Compartir a través de


Set-StrictMode

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

Syntax

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 estricto 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 de codificación básicas de procedimientos recomendados.

Use el parámetro Version para determinar las reglas de codificación que se van a aplicar.

Set-PSDebug -Strict el 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 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 estricto como versión 1.0

# Strict mode is off by default.
$a -gt 5

False

Set-StrictMode -Version 1.0
$a -gt 5

InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.

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

Ejemplo 2: Activar el modo estricto 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)

InvalidOperation: The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.

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

PropertyNotFoundException: The property 'Month' cannot be found on this object. Verify that the property exists.

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

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

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. Con el modo de versión 2.0 estricta, 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 estricto como versión 3.0

Con el modo estricto 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']

OperationStopped: Index was outside the bounds of the array.

InvalidArgument: Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."

Con el modo estricto 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.

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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 en 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.
    • Prohibición de los límites o los índices de matriz que no se pueden resolver.
  • 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 version 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.

Type:Version
Aliases:v
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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 superior a 3.0.

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