You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键修正说明:

  1. 删除了多余的$XMLFile.Save($File),避免先用默认编码覆盖文件。
  2. 把XmlWriter.Create的第一个参数改为文件路径$File,让编码配置真正生效。
  3. UTF8Encoding($false)里的$false明确指定不生成BOM头。

内容的提问来源于stack exchange,提问作者Christopher Cass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:24:52