如何使用 Powershell 替换 XML 文件中的值/文本

如何使用 Powershell 替换 XML 文件中的值/文本

我的 XML 文件中有以下内容。我正在尝试使用 powershell 脚本更新 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<Topology>
  <Core>
    <SERVER1 desc="computer name server"></SERVER1>
    <SERVER2 desc="computer name server"></SERVER2>
    <CORE1 desc="application core"></CORE1>
    <CORE2 desc="application core"></CORE2>
  </Core>
    <Credentials>
          <AppCredentials>
              <USERNAME></USERNAME>
              <PASSWORD></PASSWORD>
          </AppCredentials>
          <ServicesCredentials>
              <SC_USERNAME></SC_USERNAME>
              <SC_PASSWORD></SC_PASSWORD>
              <SC_DOMAIN></SC_DOMAIN>
          </ServicesCredentials>
    </Credentials>
</Topology>

我编写了以下内容以便更新 XML 文件。但是,它没有按预期工作。

$xmldata =[XML](Get-Content C:\Config.xml)
$xmldata. Core.SERVER1.InnerText = 'Admin'
$xmldata. Core.SERVER2.InnerText = 'Nimda'
$xmldata. AppCredentials.USERNAME.InnerText = 'Account'
$xmldata. AppCredentialsPASSWORD.InnerText = '123'
$xmldata. Save((Resolve-Path C:\Config.xml). Path)

我收到以下错误。

无法在此对象上找到属性“InnerText”。请验证该属性是否存在并且可以设置。位于 C:\Users\Administrator\Documents\replacetokendistributedtest.ps1:2 char:1

  • $xmldata.Core.SERVER2.InnerText = 'Nimda'
  •   + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      + FullyQualifiedErrorId : PropertyNotFound
    
    

最后,当我们运行上述脚本时,XML 文件应该如下所示

<?xml version="1.0" encoding="utf-8"?>
<Topology>
  <Core>
    <SERVER1 desc="computer name server">Admin</SERVER1>
    <SERVER2 desc="computer name server">Nimda</SERVER2>
    <CORE1 desc="application core"></CORE1>
    <CORE2 desc="application core"></CORE2>
  </Core>
    <Credentials>
          <AppCredentials>
              <USERNAME>Account</USERNAME>
              <PASSWORD>123</PASSWORD>
          </AppCredentials>
          <ServicesCredentials>
              <SC_USERNAME></SC_USERNAME>
              <SC_PASSWORD></SC_PASSWORD>
              <SC_DOMAIN></SC_DOMAIN>
          </ServicesCredentials>
    </Credentials>
</Topology>

请让我知道是否需要进行任何其他更改才能实现此功能

答案1

$xmldata = [XML](Get-Content C:\temp\config.xml)
$xmldata.Topology.Core.SERVER1.desc = 'Admin'
$xmldata.Topology.Core.SERVER2.desc = 'Nimda'
$xmldata.Topology.Credentials.AppCredentials.USERNAME = 'Account'
$xmldata.Topology.Credentials.AppCredentials.PASSWORD = '123'
$xmldata. Save("C:\temp\Config.xml")

但这不是一种安全的方式,因为凭证以明文形式保存在一个简单的文本文件中(xml 文件是一个文本文件)。

问候

相关内容