Я совершенно смущен некоторым поведением переменной области видимости, которое я испытываю. Возьмите следующий образец модуля:
$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 - нет.
Любая помощь в выяснении того, что здесь происходит, будет высоко оценена.
Дэйвид