Set-StrictMode
建立和强制执行表达式、脚本和脚本块中的编码规则。
语法
Set-StrictMode -Off [<CommonParameters>]
Set-StrictMode -Version <Version> [<CommonParameters>]
说明
Set-StrictMode cmdlet 为当前作用域(以及所有子作用域)配置 strict 模式,并打开和关闭该模式。当 strict 模式处于打开状态时,如果表达式、脚本或脚本块的内容违反了基本的最佳实践编码规则,则 Windows PowerShell 会生成终止错误。
使用 Version 参数可以确定要强制执行哪些编码规则。
与 Set-PSDebug cmdlet 不同,Set-StrictMode 仅影响当前作用域及其子作用域,因此它可以在脚本或函数中使用,而不会影响全局作用域。
如果 Set-StrictMode 关闭,则假定未初始化变量 (Version 1) 的值为 0(零)或 $null,具体取决于类型。引用不存在的属性会返回 $null,无效函数语法的结果因错误而异。不允许使用未命名的变量。
参数
-Off
关闭 strict 模式。此参数还会关闭“Set-PSDebug –Strict”。
是否为必需? |
true |
位置? |
named |
默认值 |
无 |
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Version <Version>
指定在 strict 模式下导致错误的条件。此参数是必需的。
有效值为“1.0”、“2.0”和“Latest”。下表显示了每个值的作用。
1.0
-- 禁止引用未初始化的变量,但字符串中未初始化的变量例外。
2.0
-- 禁止引用未初始化的变量(包括字符串中未初始化的变量)。
-- 禁止引用对象的不存在的属性。
-- 禁止使用用于调用方法的语法来调用函数。
-- 禁止使用无名称的变量 (${})。
Latest:
--选择最新(最严格)的可用版本。使用该值可以确保脚本使用最严格的可用版本,即使有新版本添加到 Windows PowerShell 中也是如此。
是否为必需? |
true |
位置? |
named |
默认值 |
无 |
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
无 不能通过管道将输入传递给此 cmdlet。 |
输出 |
无 此 cmdlet 不返回任何输出。 |
说明
Set-StrictMode 类似于 Set-PSDebug 的 Strict 参数。“Set-Strictmode -version 1”等效于“Set-PSDebug –strict”,两者的区别在于 Set-PSDebug 在所有作用域中都有效,而 Set-StrictMode 仅在设置了此参数的作用域及其子作用效中有效。有关 Windows PowerShell 中的作用域的详细信息,请参阅 about_Scopes。
示例 1
C:\PS>set-strictmode -version 1.0
C:\PS> $a -gt 5
False
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
说明
-----------
此命令打开 strict 模式,并将它设置为 version 1.0。因此,尝试引用未初始化的变量将会失败。
示例输出显示了 version 1.0 strict 模式的效果。
示例 2
C:\PS># set-strictmode -version 2.0
# Strict mode is off by default.
C:\PS> function add ($a, $b) {$a + $b}
C:\PS> add 3 4
7
C:\PS> add(3,4)
3
4
C:\PS> set-strictmode -version 2.0
C:\PS> 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
C:\PS> set-strictmode -off
C:\PS> $string = "This is a string".
C:\PS> $string.Month
C:\PS>
C:\PS> set-strictmode -version 2.0
C:\PS> $string = "This is a string".
C:\PS> $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
说明
-----------
此命令打开 strict 模式,并将它设置为 version 2.0。因此,如果使用方法语法(括号和逗号)进行函数调用,或者引用未初始化的变量或不存在的属性,Windows PowerShell 将引发错误。
示例输出显示了 version 2.0 strict 模式的效果。
如果 version 2.0 strict 模式关闭,则“(3,4)”值会被解释为没有添加任何内容的单个数组对象。如果 version 2.0 strict 模式打开,则该值将被正确解释为用于提交两个值的错误语法。
如果 version 2.0 关闭,则引用不存在的字符串 Month 属性只会返回 Null。如果 version 2.0 打开,则该引用将被正确解释为一个引用错误。