【问题标题】:Add XML Element and Attribute with value添加带有值的 XML 元素和属性
【发布时间】:2020-04-08 00:59:53
【问题描述】:

如果没有,我想将<logFile directory="D:\Logs\HTTP\example1" /> 添加到每个站点元素。我已经创建了一个脚本,但它似乎没有识别 xml 文件中 foreach 对象上的 CreateElement 方法,它只有 .SetAttribute 和 SetAttributeNode。

$path = "I:\Projects\applicationHostBackUp.config"

$xpath = "/configuration/system.applicationHost/sites/site"

$selector = Select-Xml -Path $path -XPath $xpath | Select-Object -ExpandProperty Node

foreach($object in $selector) {
    if($object -match $object.logFile) {

    }
}

<configuration>
  <system.applicationHost>
    <sites>
           <site name="AppExample" id="3" serverAutoStart="true">
                <application path="/" applicationPool="exampleApp">
                    <virtualDirectory path="/" physicalPath="F:\Web" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="241" />
                </bindings>
                <logFile directory="D:\Logs\HTTP\exampleApp" />
            </site>
           <site name="AppExample2" id="51" serverAutoStart="true">
                <application path="/" applicationPool="exampleApp2">
                    <virtualDirectory path="/" physicalPath="F:\Web" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="241" />
                </bindings>
            </site>
           <site name="AppExample3" id="521" serverAutoStart="true">
                <application path="/" applicationPool="exampleApp3">
                    <virtualDirectory path="/" physicalPath="F:\Web" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="241" />
                </bindings>
            </site>
    </sites>
  </system.applicationHost>
</configuration>

【问题讨论】:

    标签: .net xml powershell powershell-3.0


    【解决方案1】:

    这行得通:

    1. 查找所有没有 logFile 元素的站点
    2. 如果 logFile 元素不存在 - 创建一个新的
    3. 新建属性目录并设置值
    4. 将 Directory 属性添加到 logFile 元素中
    5. 将日志文件元素附加到站点元素

      $dataFilePath = "I:\Projects\applicationHostBackUp.config"
      
      [xml]$data = Get-content -Path $dataFilePath
      
      foreach ($item in $data.configuration.'system.applicationHost'.sites.site){
      
        if(!$item.logFile) {
          $logFileElement = $data.CreateElement("logFile")
          $directoryAttribute = $data.CreateAttribute("directory")      
      
          $directoryAttribute.psbase.value = "D:\Logs\HTTP\$($item.name)"
          $logFileElement.SetAttributeNode($directoryAttribute)
          $item.AppendChild($logFileElement)
        }
      }
      
      $data.Save($dataFilePath) 
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多