使用StringWriter输出XML时变量被展开的问题求助
解决PowerShell中XML内容变量被意外展开的问题
问题根源
你遇到的不是[System.IO.StringWriter]的问题,而是PowerShell的字符串插值行为:当XML内容用双引号包裹或经过PowerShell的字符串解析环节时,$key.Value会被当作PowerShell变量尝试展开,导致输出异常。
解决方案
- 用单引号包裹XML内容:单引号字符串不会触发PowerShell的变量解析,直接保留原始内容:
$xmlContent = '<Pattern>$key.Value</Pattern>' - 使用单引号Here-String:对于多行XML,用
@' ... '@定义,确保完全保留原始格式:$xmlContent = @' <Root> <Pattern>$key.Value</Pattern> </Root> '@ - 直接读取原始XML文件:如果XML来自外部文件,用
Get-Content -Raw读取,跳过PowerShell的字符串插值:$xmlContent = Get-Content -Raw -Path "your-xml-file.xml" - 修正函数的参数传递:确保传递给
Write-PxXmlToConsole的是未被插值的原始字符串,函数内部直接写入StringWriter即可,无需额外设置:function Write-PxXmlToConsole { param([string]$XmlContent) $sw = [System.IO.StringWriter]::new() try { $sw.Write($XmlContent) Write-Host $sw.ToString() } finally { $sw.Dispose() } }
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

