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.