严重性级别:警告
默认状态:始终启用
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 中的“抑制规则”部分。