我对我遇到的一些可变范围行为感到很困惑。采取以下示例模块:
$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 的进一步运行继续向 $xmlTemplate 添加越来越多的子元素,而 $intTemplate 保持不变。我不明白为什么 $myXml 并不总是从简单的测试/元素结构开始,更重要的是,脚本本地 $xmlTemplate 变量似乎正在发生变化,而 intTemplate 却没有。
任何有关弄清楚这里发生了什么的帮助将不胜感激。
大卫