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

PowerShell操作XML:移除加密密码节点并添加明文密码遇问题求助

PowerShell XML操作:移除指定节点并添加新节点

针对你遇到的两个问题,以下是修正方案和原因说明:

问题1:无法移除password-encrypted节点

你的代码中对jdbc-driver-params节点做了不必要的循环,且可以更直接地定位目标节点。修正后直接通过节点层级访问目标节点,同时增加存在性判断避免报错。

问题2:保存后XML丢失换行格式

使用OuterXml输出的是无格式的压缩字符串,改用XmlDocument的Save()方法,并开启空白保留设置,即可自动保留缩进和换行。

修正后的完整代码

$file = "Path of xml file with content as mentioned above"
Get-ChildItem $file | ForEach-Object {
    # 初始化XML文档并保留空白格式
    $xml = New-Object System.Xml.XmlDocument
    $xml.PreserveWhitespace = $true
    $xml.Load($_.FullName)

    # 创建并添加password节点
    $passwordNode = $xml.CreateElement('password')
    $passwordNode.InnerText = 'unencryptedpwd'
    $xml.'jdbc-data-source'.'jdbc-driver-params'.AppendChild($passwordNode) | Out-Null

    # 定位并移除password-encrypted节点
    $encryptedNode = $xml.'jdbc-data-source'.'jdbc-driver-params'.'password-encrypted'
    if ($encryptedNode) {
        $xml.'jdbc-data-source'.'jdbc-driver-params'.RemoveChild($encryptedNode) | Out-Null
    }

    # 保存XML文件,自动维持格式
    $xml.Save($_.FullName)
}

关键修改说明

  • 加载XML时保留空白:设置$xml.PreserveWhitespace = $true,确保原有缩进和换行被保留
  • 直接访问节点:通过$xml.'jdbc-data-source'.'jdbc-driver-params'.'password-encrypted'直接定位目标节点,比XPath更直观
  • 节点存在性判断:添加if ($encryptedNode)避免节点不存在时抛出异常
  • 使用Save方法保存:XmlDocument.Save()会自动按照格式化后的结构写入文件,解决格式丢失问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:51:13