避免全域變數

嚴重性層級:警告

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