当我处理代码以进行一些广泛的 XML 操作时,我一直在使用此函数将 XML 转储到控制台进行审查,并且在大多数情况下它按预期工作。
function Write-PxXmlToConsole {
param (
[Xml.XmlNode]$Xml
)
if ($Xml -is [Xml.XmlDocument]) {
$xmlDocument = $Xml
} else {
$xmlDocument = [Xml.XmlDocument]::new()
$newElement = $xmlDocument.ImportNode($Xml, $True)
[Void]$xmlDocument.AppendChild($newElement)
}
$stringWriter = [System.IO.StringWriter]::new()
$xmlWriter = [System.Xml.XmlTextWriter]::new($stringWriter)
$xmlWriter.Formatting = "indented"
$xmlDocument.WriteTo($xmlWriter)
$xmlWriter.Flush()
$stringWriter.Flush()
Write-Host $stringWriter.ToString()
Write-Host
}
然而,似乎某个地方的[System.IO.StringWriter]
变数正在扩大。因为当我的 XML 看起来像这样时
$xml = [Xml]@"
<Pattern>$key.Value</Pattern>
"@
Write-PxXmlToConsole $xml
我得到<Pattern>Autodesk Revit 2019.Value</Pattern>
输出是因为在这个会话的某个地方变量$key
被填充了。如果我开始一个新的会话,我会得到<Pattern>.Value</Pattern>
. 有点痛苦,我在这里似乎找不到任何表明可以抑制这种行为的设置。
[Xml]
变量在使用双引号创建期间得到扩展:使用单引号时,输出有所不同: