Заменить значения во вложенных XML с помощью PowerShell - PullRequest
1 голос
/ 02 мая 2020

Как заменить значения во вложенном xml с помощью Powershell?

Как заменить значения «Racers», «Pacers», «Losers» с «false» на «True» с помощью PowerShell?

<Tester>
<TesterSection>
 <section name="TestingApp" type="Amazon,Google" />
</TesterSection>
<application>
 <add key="Minimum" value="1" />
 <add key="Maximum" value="true" />
 <add key="Runners" value="N/A" />
 <add key="Racers" value="false" />
 <add key="Pacers" value="false" />
 <add key="Losers" value="false" />
</application>  
</Tester> ```

Ответы [ 2 ]

4 голосов
/ 02 мая 2020

Еще одно предложение - использовать xpath. Вот рабочий снайпер для вашего примера

[xml]$xml = @"
<Tester>
    <TesterSection>
        <section name="TestingApp" type="Amazon,Google" />
    </TesterSection>
    <application>
        <add key="Minimum" value="1" />
        <add key="Maximum" value="true" />
        <add key="Runners" value="N/A" />
        <add key="Racers" value="false" />
        <add key="Pacers" value="false" />
        <add key="Losers" value="false" />
    </application>  
</Tester>
"@

foreach ($key in $("Racers","Pacers","Losers")) {
    $xml.selectNodes("//application/add[@key='$key']") | %{ $_.value = "true" }
}
$xml.Save("c:\temp\FileAfter.xml")
2 голосов
/ 02 мая 2020

Вы можете попробовать это

# Simulate the XML in a string
$text = @"
<Tester>
<TesterSection>
 <section name="TestingApp" type="Amazon,Google" />
</TesterSection>
<application>
 <add key="Minimum" value="1" />
 <add key="Maximum" value="true" />
 <add key="Runners" value="N/A" />
 <add key="Racers" value="false" />
 <add key="Pacers" value="false" />
 <add key="Losers" value="false" />
</application>  
</Tester>
"@

$xml = [xml]$text
# You can load the file with
# $xml = [xml] "c:\temp\thefile.xml"

# List of keys to change
$tochange = "Racers","Pacers","Losers"

foreach ($add in $xml.Tester.application.add)
{
  # value before
  $add.value
  # modification
  if ($tochange -contains $add.key)
  {
    $add.value= "true"
  }
  # name after
  $add.value
}
# Or in a sigle line
#$xml.Tester.application.add | % {if ($_.value -eq "false"){$_.Value ="true"}}
$xml.Save("c:\temp\FileAfter.xml")
...