【问题标题】:Edit xml using powershell使用 powershell 编辑 xml
【发布时间】:2015-02-13 07:49:27
【问题描述】:
<configuration>
  <runtime>
    <assemblyBindings>
      <dependentAssemblyss>
        <assemblyIdentity name="A" publicKeyToken="5d861ad8ad8cd06f" culture="neutral" />
        <bindingRedirects oldVersion="0.0.0.0-68834.68834.68834.68834" newVersion="4.5.0.103" />
      </dependentAssemblys>
      <dependentAssembly>
        <assemblyIdentity name="B" publicKeyToken="ae714df8cd90bc8f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="3.0.0.103" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="C" publicKeyToken="22955931b98512b6" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="8.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>

我已经发布了这个并得到了这个问题的答案......我可以发布这个新问题作为对此的评论,但由于字符限制,我将它发布在这里

如何更改 newVersion 值? A、B 将有 0.0.0.1,C、D 将有 0.0.0.2 谢谢!!

【问题讨论】:

标签: xml powershell edit


【解决方案1】:

PowerShell 在处理 [Xml] 类型时非常灵活。在下面的示例中,我从上面读取您的 xml(修复了一些 xml 格式错误),然后使用哈希数组 ($replacements) 来指定哪些命名的依赖程序集应该具有哪些 newVersion 值。

[Xml]$doc = @"
<configuration>
  <runtime>
    <assemblyBindings>
      <dependentAssembly>
        <assemblyIdentity name="A" publicKeyToken="5d861ad8ad8cd06f" culture="neutral" />
        <bindingRedirects oldVersion="0.0.0.0-68834.68834.68834.68834" newVersion="4.5.0.103" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="B" publicKeyToken="ae714df8cd90bc8f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="3.0.0.103" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="C" publicKeyToken="22955931b98512b6" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="8.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>
    </assemblyBindings>
  </runtime>
</configuration>
"@
$replacements =@(@{'name'='C'; 'newVersion'='0.0.1'},@{'name'='D'; 'newVersion'='0.0.3'})
foreach($replacement in $replacements)
{
  $doc.configuration.runtime.assemblyBindings.dependentAssembly | `
     Where-Object -FilterScript {$_.assemblyIdentity.name -eq $replacement.name} |% `
     {$_.bindingRedirect.newVersion = $replacement.newVersion}
}
#Output the raw xml to show the changes:
write-host $doc.OuterXml

foreach 正在遍历 $replacements 中的元素,然后通过它的 assemblyIdentity.name 找到匹配的dependentAssembly,然后更新 newVersion 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 2014-09-12
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2011-06-28
    相关资源
    最近更新 更多