PowerShellスクリプトを書く際に、変数のスコープを理解することは非常に重要。スコープは、変数がどこで定義され、どこでアクセスできるかを決定します。この記事では、PowerShellの変数スコープについて説明し、具体的な例を通じてその使い方を紹介します。
1. グローバルスコープ
グローバルスコープの変数は、スクリプト全体およびすべての関数で利用可能です。これにより、スクリプトのどこからでもアクセスできる共通の設定やデータを保持するのに便利です。
1 2 3 4 |
$global:GlobalConfig = @{ "AppName" = "MyApp" "Version" = "1.0.0" } |
上記の例では、$global:GlobalConfig
というハッシュテーブルが定義されており、スクリプト全体で利用可能です。
2. スクリプトスコープ
スクリプトスコープの変数は、スクリプトファイル内のすべての関数で利用可能です。これにより、スクリプト内で共有する必要があるデータを保持するのに適しています。
1 |
$script:ScriptWideCounter = 0 |
この例では、$script:ScriptWideCounter
という変数が定義されており、スクリプト内のどこからでもアクセスできます。
3. ローカルスコープ
ローカルスコープの変数は、定義された関数内でのみ利用可能です。関数外からはアクセスできません。
1 2 3 |
function Initialize-Environment { $local:tempPath = "C:\Temp" } |
この例では、$local:tempPath
という変数がInitialize-Environment
関数内で定義されており、この関数内でのみ利用可能です。
4. プライベートスコープ
プライベートスコープの変数は、定義された関数内でのみ利用可能で、子スコープからもアクセスできません。
1 2 3 |
function Initialize-Environment { $private:sensitiveData = "SecretKey123" } |
この例では、$private:sensitiveData
という変数がInitialize-Environment
関数内で定義されており、この関数内でのみ利用可能です。
5. 実際のスクリプト例
以下は、上記のスコープを使用した実際のスクリプト例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# グローバルスコープの変数 $global:GlobalConfig = @{ "AppName" = "MyApp" "Version" = "1.0.0" } # スクリプトスコープの変数 $script:ScriptWideCounter = 0 function Initialize-Environment { # ローカルスコープの変数 $local:tempPath = "C:\Temp" # プライベートスコープの変数 $private:sensitiveData = "SecretKey123" # グローバル変数の使用例 Write-Host "Initializing $($global:GlobalConfig.AppName) version $($global:GlobalConfig.Version)" # スクリプト変数の更新 $script:ScriptWideCounter++ } function Process-Data { # ローカルスコープの変数 $processedItems = 0 # スクリプト変数の使用例 Write-Host "Processing data. Current count: $script:ScriptWideCounter" # ローカル変数の更新 $processedItems++ } # メイン処理 Initialize-Environment Process-Data # スクリプト変数の最終値を表示 Write-Host "Final counter value: $script:ScriptWideCounter" |
このスクリプトは、変数のスコープを理解するのに役立ちます。グローバル変数、スクリプト変数、ローカル変数、プライベート変数の使い方を示しています。
コメント