当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 设置严格模式 (Microsoft.PowerShell.Core)

作者:精品下载站 日期:2024-12-14 02:14:14 浏览:14 分类:玩电脑

设置严格模式 (Microsoft.PowerShell.Core)


Set-StrictMode

模块 :Microsoft.PowerShell.Core

建立并强制执行表达式、脚本和脚本块中的编码规则。

句法

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

描述

Set-StrictMode cmdlet 为当前作用域和所有子作用域配置严格模式,并将其打开和关闭。启用严格模式后,当表达式、脚本或脚本块的内容违反基本的最佳实践编码规则时,PowerShell 会生成终止错误。

使用版本参数来确定要强制执行的编码规则。

Set-PSDebug -Strict cmdlet 打开全局范围的严格模式。 Set-StrictMode 仅影响当前作用域及其子作用域。然后,您可以在脚本或函数中使用它来覆盖从全局范围继承的设置。

Set-StrictMode 关闭时,PowerShell 具有以下行为:

  • 未初始化的变量被假定为 0(零)或 $Null 值,具体取决于类型
  • 对不存在属性的引用返回$Null
  • 不正确的函数语法的结果随错误条件的不同而变化
  • 尝试使用数组中的无效索引检索值会返回 $Null

示例

示例1:作为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.

将严格模式设置为版本 1.0 时,尝试引用未初始化的变量会失败。

示例2:作为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.

此命令打开严格模式并将其设置为版本 2.0。因此,如果您使用方法语法(使用括号和逗号)进行函数调用或引用未初始化的变量或不存在的属性,PowerShell 将返回错误。

示例输出显示了 2.0 版本严格模式的效果。

如果没有版本 2.0 严格模式,(3,4) 值将被解释为不添加任何内容的单个数组对象。在 2.0 严格模式下,它会被正确解释为提交两个值的错误语法。

如果没有 2.0 版本,则对字符串中不存在的 Month 属性的引用仅返回 $Null。在 2.0 版本中,它被正确解释为引用错误。

示例3:在3.0版本中开启严格模式

将严格模式设置为关闭时,无效或越界索引结果将返回空值。

# 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."

将严格模式设置为版本 3 或更高版本时,无效或越界索引会导致错误。

参数

-Off

指示此 cmdlet 关闭当前作用域和所有子作用域的严格模式。

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

-Version

指定在严格模式下导致错误的条件。此参数接受任何有效的 PowerShell 版本号。任何高于 3 的数字都被视为最新。提供的值必须是字符串 Latest 或可以转换为 System.Version 类型的字符串。该版本必须与 PowerShell 的有效发行版本匹配。

该参数的有效值为:

  • 1.0

    • 禁止引用未初始化的变量,字符串中未初始化的变量除外。
  • 2.0

    • 禁止引用未初始化的变量。这包括字符串中未初始化的变量。
  • 禁止引用对象不存在的属性。
  • 禁止使用调用方法语法的函数调用。
  • 3.0

    • 禁止引用未初始化的变量。这包括字符串中未初始化的变量。
  • 禁止引用对象不存在的属性。
  • 禁止使用调用方法语法的函数调用。
  • 禁止越界或无法解析的数组索引。
  • 最新

    • 选择可用的最新版本。最新版本是最严格的。使用此值可确保脚本使用最严格的可用版本,即使将新版本添加到 PowerShell 时也是如此。
  • 警告

    在脚本中使用Latest作为Version并不是确定性的。在新版本的 PowerShell 中,最新 的含义可能会发生变化。为较旧版本的 PowerShell 编写的使用 Set-StrictMode -Version Latest 的脚本在较新版本的 PowerShell 中运行时会受到更严格的规则的约束。

    类型 :

    版本

    别名:

    v

    位置:

    命名

    默认值:

    None

    必需的:

    True

    接受管道输入:

    False

    接受通配符:

    False

    输入

    您无法将对象通过管道传输到此 cmdlet。

    输出

    此 cmdlet 不返回任何输出。

    笔记

    虽然 Version 参数接受大于 3.0 的值,但没有为高于 3.0 的任何值定义其他规则。

    Set-StrictMode 仅在其设置的范围及其子范围内有效。有关 PowerShell 中范围的更多信息,请参阅 about_Scopes。

    您需要 登录账户 后才能发表评论

    取消回复欢迎 发表评论:

    关灯