PowerShellスクリプトを書く際に、変数のスコープを理解することは非常に重要。スコープは、変数がどこで定義され、どこでアクセスできるかを決定します。この記事では、PowerShellの変数スコープについて説明し、具体的な例を通じてその使い方を紹介します。
1. グローバルスコープ
グローバルスコープの変数は、スクリプト全体およびすべての関数で利用可能です。これにより、スクリプトのどこからでもアクセスできる共通の設定やデータを保持するのに便利です。
$global:GlobalConfig = @{
"AppName" = "MyApp"
"Version" = "1.0.0"
}
上記の例では、$global:GlobalConfigというハッシュテーブルが定義されており、スクリプト全体で利用可能です。
2. スクリプトスコープ
スクリプトスコープの変数は、スクリプトファイル内のすべての関数で利用可能です。これにより、スクリプト内で共有する必要があるデータを保持するのに適しています。
$script:ScriptWideCounter = 0
この例では、$script:ScriptWideCounterという変数が定義されており、スクリプト内のどこからでもアクセスできます。
3. ローカルスコープ
ローカルスコープの変数は、定義された関数内でのみ利用可能です。関数外からはアクセスできません。
function Initialize-Environment {
$local:tempPath = "C:\Temp"
}
この例では、$local:tempPathという変数がInitialize-Environment関数内で定義されており、この関数内でのみ利用可能です。
4. プライベートスコープ
プライベートスコープの変数は、定義された関数内でのみ利用可能で、子スコープからもアクセスできません。
function Initialize-Environment {
$private:sensitiveData = "SecretKey123"
}
この例では、$private:sensitiveDataという変数がInitialize-Environment関数内で定義されており、この関数内でのみ利用可能です。
5. 実際のスクリプト例
以下は、上記のスコープを使用した実際のスクリプト例です。
# グローバルスコープの変数
$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"
このスクリプトは、変数のスコープを理解するのに役立ちます。グローバル変数、スクリプト変数、ローカル変数、プライベート変数の使い方を示しています。

コメント