У меня есть файл конфигурации, подобный приведенному ниже:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.3" newVersion="4.1.1.3" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<appSettings>
<add key="key1" value="Value1" />
<add key="key2" value="Value12" />
<add key="key3" value="Value3" />
</appSettings>
</configuration>
Теперь через powershell я пытаюсь заменить некоторые значения, например, Value1
. Для этого я написал следующий скрипт:
$original_file = "C:\test.xml"
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'Value1', 'Newvalue'
} | Set-Content $original_file
Итак, что он делает, он заменяет все строки Value1
на строку Newvalue
. Проблема, с которой я здесь сталкиваюсь, заключается в изменении всех значений, где Value1
найдено, вот так.
<appSettings>
<add key="key1" value="Newvalue" />
<add key="key2" value="Newvalue2" /> --- this is not supposed to happen
<add key="key3" value="Value3" />
</appSettings>
И на самом деле, у меня фактические значения очень длинные строки.
Так есть ли способ найти ключ и изменить его значение? Как найти Key1
и изменить его значение на NewValue
.
Любая помощь высоко ценится.