更新config xml文件并使用powershell保存
问题描述:
我需要以这种方式更新此配置文件,所有'newVersion'值都需要更新为单个值。更新config xml文件并使用powershell保存
<configuration>
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="A"
publicKeyToken="5d861ad8ad8cd06f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="4.0.0.103" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="B" publicKeyToken="ae714df8cd90bc8f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="4.0.0.103" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="C" publicKeyToken="22955931b98512b6" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="4.0.0.103" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="D"
publicKeyToken="585a888b4a9ba2e3"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534"
newVersion="2.5.0.1286"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>
我已经试过这下面
$appconfig='file location'
$doc = (Get-Content $appconfig) -as [Xml]
$obj = $doc.configuration.runtime.assemblyBinding.dependentAssembly
$obj2 = $obj.assemblyIdentity | where {$_.name -eq 'D'}
$obj.bindingRedirect.newVersion="1.1.1.1"
echo $obj.bindingRedirect.newVersion
$doc.Save($appconfig)
我知道这会改变只为“d”的一部分,怎么可以在上面A,B和C也更改为。谢谢你的帮助 !
答
(gc C:\temp\config.xml) -replace '(newversion=)".*?"' ,'$1"1.1.1.1"' # if you want to save the file add |sc c:\temp\config.xml
你摇滚!!非常感谢! – Bhaskar 2015-02-11 21:00:09
''newversion =。*''也会匹配并替换关闭的“/>”,从而导致您的XML文件无效。我宁愿使用:'(gc C:\ temp \ config.xml)-replace'(newversion =)“。*?”','$ 1“1.1.1.1”''。 – 2015-02-11 21:20:30
请记住,这取代了“newversion”的所有出现的值,而不管哪个节点是属性。 @dotnetom的答案更省钱。 – 2015-02-11 21:29:44