私が経験しているいくつかの可変スコープ動作とはかなり混乱しています。次のサンプルモジュールを取ります。
$script:intTemplate = 1
[xml]$script:xmlTemplate = @"
<test>
<element>
</element>
</test>
"@
function getvar {
$myint = $script:intTemplate
$myint++
Write-output "Myint is $myint while intTemplate is $intTemplate"
$myxml = $script:xmlTemplate
$e = $myxml.CreateElement("MyChildElement")
$myxml.SelectSingleNode("/test").AppendChild($e) |Out-Null
$myxml.Innerxml.tostring()
$script:xmltemplate.Innerxml.tostring()
}
実行中のモジュールをインポートすると、次のようにgetvar
生成されます。
PS C:\Windows\system32> getvar
Myint is 2 while intTemplate is 1
<test><element></element><MyChildElement /></test>
<test><element></element><MyChildElement /></test>
getvarをさらに実行すると、$ intTemplateは同じままで、$xmlTemplateにさらに多くの子要素が追加され続けます。$ myXmlが必ずしも単純なテスト/要素構造で開始されるとは限らない理由、さらに言えば、スクリプトのローカル$ xmlTemplate変数が変更されているように見えるのに、intTemplateは変更されていないように見える理由がわかりません。
ここで何が起こっているのかを理解するための支援をいただければ幸いです。
デビッド