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 打开,则该引用将被正确解释为一个引用错误。





另请参阅

概念

about_Debuggers
about_Scopes
Set-PSDebug