PowerShell替换XML节点属性

时间:2019-04-14 14:50:27

标签: xml powershell

我想使用PowerShell替换所有配置文件中存在的note属性。

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <configSections>
    <section name="cutomSection" type="SomeType"/>
  </configSections>
  <cutomSection>
    <add key="dontUpdateThisKey" value="Value not to be updated 1"/>
    <add key="keyNameToFind" value="Old value"/>
    <add key="dontUpdateThisKey2" value="Value not to be updated 2"/>
    <add key="dontUpdateThisKey3" value="Value not to be updated 3"/>
  </cutomSection>
  <supportAuth>
    <add key="baseUrl" value="https://test.com"/>
    <add key="timeout" value="30"/>
  </supportAuth>
</configuration>

到目前为止,我有以下工作代码,但是我敢肯定,这样做可以更有效。打印输出仅用于调试,结果代码中不需要。

更直接的方式可以更新属性值吗?我正在循环查找键名,并有一个“找到”标志...必须有更好的方法...

ls "c:\Test\" *.config -rec | % {
    $found = 0;
    $f = $_.FullName;
    #$f;
    try {
        $config = [xml](Get-Content -LiteralPath $f);
        $config.configuration.cutomSection.add| % {
            if ($_.key -eq "keyNameToFind") {
                $found = 1;
                $_.value = "New test value";
            }
        }
        if ($found -eq 1) {
            #"Saving " + $f;
            $config.Save($f);
        } else {
            #"Ignoring " + $f;
        }
    } catch {
        #"Error " + $f;
        #$_.Exception.Message
    }
}

0 个答案:

没有答案