PowerShell编辑XML文件并保存为无BOM UTF-8格式的问题
解决XML保存后变为UTF8-BOM格式的问题
问题出在这两处:
- 你先执行了
$XMLFile.Save($File),这一步已经用默认带BOM的UTF-8编码覆盖了原文件,后面的XmlWriter配置完全没生效。 - 调用
XmlWriter.Create时参数错误,第一个参数应该是文件路径字符串,你传成了XML文档对象$XMLFile,导致这部分编码配置逻辑完全失效。
修正后的完整代码:
$DateStamp = get-date -uformat "%Y_%m_%d_%H.%M.%S" $File = "$Path\File.xml" Copy-Item $File -Destination "$Path\File.xml.$DateStamp.bak" [xml]$XMLFile = Get-Content $File $AuditEvent = $XMLFile.File.Job | Where-object Name -EQ 'AuditEvent' $LogEvent = $XMLFile.File.Job | Where-object Name -EQ 'LogEvent' $AuditEvent.ExpiryDuration = "$Audit" $LogEvent.ExpiryDuration = "$Log" # 配置无BOM的UTF-8编码 [System.Xml.XmlWriterSettings] $XmlSettings = New-Object System.Xml.XmlWriterSettings $XmlSettings.Indent = $false $XmlSettings.Encoding = New-Object System.Text.UTF8Encoding($false) # 传入正确的文件路径,用XmlWriter保存 [System.Xml.XmlWriter] $XmlWriter = [System.Xml.XmlWriter]::Create($File, $XmlSettings) $XMLFile.Save($XmlWriter) $XmlWriter.Dispose()
关键修正说明:
- 删除了多余的
$XMLFile.Save($File),避免先用默认编码覆盖文件。 - 把
XmlWriter.Create的第一个参数改为文件路径$File,让编码配置真正生效。 UTF8Encoding($false)里的$false明确指定不生成BOM头。
内容的提问来源于stack exchange,提问作者Christopher Cass
相关产品推荐
相关产品推荐

