使用Powershell修改XML元素值时出现问题

使用Powershell修改XML元素值时出现问题,xml,powershell,Xml,Powershell,我正在使用下面的PowerShell更新某些XML中元素的值,这很好,但是当我保存XML时,它似乎改变了格式 $xmlFileName = "D:\scripts\DbRestoreDIFF.xml" [xml]$xmlDoc = Get-Content $xmlFileName $xmlDoc.TMMsg_CreateTaskReq.taskInfo.subTasks.options.restoreOptions.browseOption.timeRange.toTimeValue = $T

我正在使用下面的PowerShell更新某些XML中元素的值,这很好,但是当我保存XML时,它似乎改变了格式

$xmlFileName = "D:\scripts\DbRestoreDIFF.xml"
[xml]$xmlDoc = Get-Content $xmlFileName 
$xmlDoc.TMMsg_CreateTaskReq.taskInfo.subTasks.options.restoreOptions.browseOption.timeRange.toTimeValue = $Timestamp
$xmlDoc.Save($xmlFileName)
保存文档后,格式有几个元素:

<alert>
<alertName></alertName>
</alert>

致:



我试着保留空白,但似乎没有帮助。这给我带来了一个问题,因为我确信他们无法正确传递XML。

XmlDocument的
save()
中的默认值是导致此问题的原因。如上所述,开始和结束标记位于不同的行上:

[xml]$x = '<alert> <alertName></alertName> </alert>'
$x.save([console]::out)
# Output
<?xml version="1.0" encoding="ibm850"?>
<alert>
  <alertName>
  </alertName>
</alert>
[xml]$x='带有。将输出保存到控制台的示例如下:

[xml]$x = '<alert> <alertName></alertName> </alert>'
$settings = $(new-object Xml.XmlWriterSettings)
$settings.Indent = $true
$settings.IndentChars = "`t"

$xmlWriter = [Xml.XmlWriter]::create([console]::out, $settings)
$x.save($xmlWriter)
$xmlWriter.close()

# Output
<?xml version="1.0" encoding="ibm850"?>
<alert>
        <alertName></alertName>
</alert>
[xml]$x=''
$settings=$(新对象Xml.XmlWriterSettings)
$settings.Indent=$true
$settings.IndentChars=“`t”
$xmlWriter=[Xml.xmlWriter]::创建([console]::输出,$settings)
$x.save($xmlWriter)
$xmlWriter.close()
#输出

正确传递XML是什么意思?这会导致什么问题?读取它的应用程序(在本例中为Commvault)无法正确读取它。它假定提供了一个值,但实际为空。谢谢您的帮助。上面的一个变体使我能够按预期更新XML。
[xml]$x = '<alert> <alertName></alertName> </alert>'
$settings = $(new-object Xml.XmlWriterSettings)
$settings.Indent = $true
$settings.IndentChars = "`t"

$xmlWriter = [Xml.XmlWriter]::create([console]::out, $settings)
$x.save($xmlWriter)
$xmlWriter.close()

# Output
<?xml version="1.0" encoding="ibm850"?>
<alert>
        <alertName></alertName>
</alert>