在 PowerShell 中使用全域性變數

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell 全域性變數簡介
  2. PowerShell 全域性變數的好處
  3. 宣告 PowerShell 全域性變數
  4. 在 PowerShell 中將全域性變數作為引數傳遞
  5. 在 PowerShell 中使用 Set-Variable 為全域性變數設定值
在 PowerShell 中使用全域性變數

變數是可以儲存特定值以供以後處理或向使用者顯示其重要性的物件。Windows PowerShell 中有多種型別的變數。

我們將討論 Windows PowerShell 全域性變數並在 PowerShell 中實現它們。

PowerShell 全域性變數簡介

每個變數都有特定的範圍。當我們在函式內部定義自定義變數時,它只能在該函式內部訪問,而不能在外部訪問。

示例程式碼:

function sampleFunction{
    $firstvar =35;
    Write-Host $firstvar;
}

Write-Output $firstvar

上面指令碼的輸出將是 null,因為這是 PowerShell 中任何變數的預設值。在這種情況下,我們應該使用全域性變數,因為指令碼、函式和命令可以跨會話訪問它,從而在整個程式和其他方法中訪問變數。

PowerShell 全域性變數的好處

  1. 全域性變數儲存字串、整數、陣列、物件、雜湊表等所有值。
  2. 全域性變數可以包含不同物件的集合。
  3. 為每個全域性變數分配特定數量的記憶體。
  4. 每個全域性變數必須以美元符號 ($) 開頭。
  5. 在程式開始時宣告一個全域性變數是程式設計的最佳實踐。
  6. 如果我們不給你的變數賦值,預設值為 null。
  7. 全域性變數的名稱可以包含數字、字母和下劃線 (_) 符號的組合。如果我們想使用其他特殊字元,請用大括號將變數的全名括起來。

宣告 PowerShell 全域性變數

要宣告 PowerShell 全域性變數,請使用以下語法。

示例程式碼:

$global: myVariable = "apple"

如果我們選擇不提供任何值,你可以顯式分配一個 $null 值。

示例程式碼:

$global: myVariable2 = $null

我們必須提到 $global 讓 PowerShell 知道這個變數應該在整個程式中可用。

以下程式碼顯示區域性變數和全域性變數共享相同的名稱。因此,區域性變數將在函式內部優先,但區域性變數在函式外部沒有值,因此指令碼使用全域性變數。

示例程式碼:

$global:num1 = 55;

function calculateAge{
    $num1 = 45;
    Write-Host $num1 "inside the function";
}

Write-Host $num1 "outside the function";
calculateAge;

輸出:

45 inside the function
55 outside the function

在 PowerShell 中將全域性變數作為引數傳遞

我們還可以將全域性變數作為引數傳遞給函式,並在函式內部設定其值。但是,當然,你必須將全域性變數作為 REF 物件。

示例程式碼:

$global:finalVariable = $null;

function addValue ($num1, $num2, [REF]$ans){
    $ans.Value = $num1 + $num2;
}

addValue 2 3 ([REF]$global:finalVariable);

Write-Host "The final value is:" $global:finalVariable;

輸出:

The final value is: 5

在 PowerShell 中使用 Set-Variable 為全域性變數設定值

將值設定為 Windows PowerShell 全域性變數的最簡單方法是使用 Set-Variable cmdlet。

示例程式碼:

Set-Variable -Name "finalVariable" -Value "6" -Scope Global
Get-Variable -Name "finalVariable"

輸出:

Name                           Value
----                           -----
finalVariable                  6

該指令碼將顯示 6 的值。請注意,我們必須將變數的範圍稱為全域性

Set-Variable 命令還帶有一個可選引數,我們可以使用它來確定全域性變數的性質。

示例程式碼:

Set-Variable -Name "finalVariable" -Value "6" -Scope Global -Option Read-Only

上面的程式碼將生成一個全域性變數併為其設定一個值,但它將是一個只讀全域性變數。

示例程式碼:

Set-Variable -Name "finalVariable" -Value "6" -Scope Global -Option Constant

既然我們瞭解了全域性變數,那麼在你開始在程式中使用它們之前請注意。PowerShell 全域性變數不適合生成變數或儲存值,因為我們沒有訪問控制。

換句話說,很難跟蹤全域性變數的值,因為我們可以在程式中的任何地方更改它,並且測試它們非常困難,因為它們與程式碼緊密耦合。

這就是為什麼有經驗的程式設計師通常不使用全域性變數的原因,因為它們可能會在大量程式中導致一些難以發現的錯誤。

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn