嚴重性層級:警告
Description
你應該避免修改腳本和函式中的全域變數,因為同一會話中執行的其他腳本或函式可能會依賴它們。 這可能導致意想不到的行為,並使除錯變得困難。
此規則偵測使用全域範圍修飾符的變數。 PowerShell 透過一種稱為 scoping 的機制來控制變數、函式、別名和磁碟機的存取。 PowerShell 啟動時存在的變數和函式,都是在全域作用域中建立的。 全域範圍變數包括:
- 自動變數
- 偏好變數
此規則無法偵測 New-Variable cmdlet 用於建立全域範圍內的變數,或 *-Variable 是其他 cmdlet 用於全域範圍內的變數。 它只偵測帶有全域範圍修飾符的變數表達式,例如 $global:example。
此規則不適用於使用全域範圍修飾符的變數表達式,其中變數名稱代表 自動變數 或 偏好變數。
變數可以用本地或腳本作用域來管理變數,而不是全域範圍。 欲了解更多,請參閱 about_Scopes。
Example
不合規
$var1 = 'foo'
function Test-NotGlobal ($var) {
$Global:var1 = $var
}
Test-NotGlobal 'bar'
$var1
Compliant
$var1 = 'foo'
function Test-NotGlobal ($var) {
$var1 = $var
}
Test-NotGlobal 'bar'
$var1