プライベートスコープ
変数のスコープの種類には、プライベートスコープもあります。下記スクリプトで説明します。
$a = 3
function funcA
{
Write-Host "2)$a"
$a = "7"
Write-Host "3)$a"
funcB
}
function funcB
{
Write-Host "4)$a"
}
Write-Host "1)$a"
funcA
Write-Host "5)$a"
このスクリプトには2つの関数があり、最初にfuncAを呼び出し、funcAの中からfuncBを呼び出しています。またソース内での1)~5)は分かりやすいように実行順を示しています。
このスクリプトの実行結果は下記の通りです。
PS C:\Work> ./Scope3.ps1 1)3 2)3 3)7 4)7 5)3
このスクリプトの動作について図で説明します。

1行目の変数$aはスクリプトスコープを持つ変数となるので、有効期間は赤線の通りでスクリプトファイルの最後までです。
次に6行目の変数$aですが、この変数はローカル変数となりfuncAが有効期間です。
さらに、この関数funcAはfuncBを呼び出しており、funcAで作成したローカル変数$aの有効期間は青線で示した箇所、つまりfuncBまでおよびます。
では、funcA内だけで有効なローカル変数を作成したい場合は、どうすれば良いでしょうか?
これを実現するにはprivate修飾子を使用します。
下記は「Scope3.ps1」をprivate修飾子を使用して書き換えたものです。funcAのローカル変数のスコープがfuncBに及ばないようにしています(6行目でpraivateキーワードを付加しています)。
$a = 3
function funcA
{
Write-Host "2)$a"
$private:a = "7"
Write-Host "3)$a"
funcB
}
function funcB
{
Write-Host "4)$a"
}
Write-Host "1)$a"
funcA
Write-Host "5)$a"
このスクリプトの実行結果は下記の通りです。
PS C:\Work> ./Scope4.ps1 1)3 2)3 3)7 4)3 5)3
「Scope4.ps1」でのスコープを図で見てみましょう。

privateキーワードを使用したので、funcAのローカル変数$aのスコープは青線の部分となります。
この記事は参考になりましたか?
- Windows PowerShell 入門連載記事一覧
-
- Windows PowerShell 入門(10)-デバッグ編
- Windows PowerShell 入門(9)-エラー編
- Windows PowerShell 入門(8)-関数編3
- この記事の著者
-
HIRO(ヒロ)
HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
