AvoidGlobalVars

严重性级别:警告

默认状态:始终启用

Description

你应该避免修改脚本和函数中的全局变量,因为同一会话中运行的其他脚本或函数可能会依赖它们。 这可能导致意外行为,使代码调试变得困难。

该规则检测使用全局范围修饰符的变量。 PowerShell通过一种称为作用域的机制来控制变量、函数、别名和驱动器的访问。 PowerShell启动时存在的变量和函数是在全局作用域中创建的。 全局范围变量包括:

  • 自动变量
  • 偏好变量

该规则无法检测使用 New-Variable 命令小工具创建全局作用域中的变量,也 *-Variable 检测不到其他命令小工具处理全局范围中的变量。 它只检测带有全局范围修饰符的变量表达式,比如 $global:example

该规则不适用于使用全局作用域修饰符的变量表达式,其中变量名代表 自动变量偏好变量

变量使用本地或脚本作用域,而不是全局范围。 欲了解更多信息,请参见 about_Scopes

Example

非符合性

$var1 = 'foo'
function Test-NotGlobal ($var) {
    $Global:var1 = $var
}
Test-NotGlobal 'bar'
$var1

合规的

$var1 = 'foo'
function Test-NotGlobal ($var) {
    $var1 = $var
}
Test-NotGlobal 'bar'
$var1

配置规则

这个规则始终是启用的,不能配置。 请采用以下方法之一以避免使用此规则:

  • 创建一个自定义规则配置文件,只包含你想要的规则,或者排除你不想要的规则。
  • 在代码中添加相应的规则抑制属性,以抑制特定代码块的规则。 更多信息请参见使用 PSScriptAnalyzer 中的“抑制规则”部分。